using DevExpress.XtraEditors.Repository;
|
using DevExpress.XtraVerticalGrid.Events;
|
|
namespace PBS.WinFrmUI.Hydro
|
{
|
public partial class FacilityPropertyCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public FacilityPropertyCtrl()
|
{
|
InitializeComponent();
|
this.layoutControl1.SetupLayoutControl();
|
this.propertyGridControl1.OptionsView.ShowRootCategories = false;
|
this.propertyGridControl1.OptionsBehavior.Editable = false;
|
this.propertyGridControl1.OptionsBehavior.PropertySort = DevExpress.XtraVerticalGrid.PropertySort.NoSort;
|
this.propertyGridControl1.OptionsView.AllowReadOnlyRowAppearance = DevExpress.Utils.DefaultBoolean.True;
|
this.propertyGridControl1.OptionsView.ShowFocusedFrame = false;
|
this.propertyGridControl1.OptionsView.ShowRootLevelIndent = false;
|
|
this.propertyGridControl1.RecordWidth = 120;
|
this.propertyGridControl1.RowHeaderWidth = 100;
|
}
|
|
|
/// <summary>
|
/// 刷新数据事件
|
/// </summary>
|
public event Action RefreshDataEvent;
|
|
/// <summary>
|
/// 允许修改
|
/// </summary>
|
public bool AllowEdit { get; set; }
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData(FacilityVmo facility)
|
{
|
FacilityPropertyViewModel vm = null;
|
if (facility != null)
|
{
|
vm = new FacilityPropertyViewModel(facility);
|
}
|
|
this.propertyGridControl1.SelectedObject = vm;
|
}
|
|
|
//自定义属性Header缩进
|
private void propertyGridControl1_CustomDrawRowHeaderIndent(object sender, CustomDrawRowHeaderIndentEventArgs e)
|
{
|
|
}
|
|
//自定义属性Header显示
|
private void propertyGridControl1_CustomDrawRowHeaderCell(object sender, CustomDrawRowHeaderCellEventArgs e)
|
{
|
//字段名称
|
var fieldName = e.Row.Properties.FieldName.Split(new char[] { '.' }).Last();
|
if (string.IsNullOrEmpty(fieldName))
|
{
|
return;
|
}
|
var realFieldName = fieldName;
|
//属性描述器
|
var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row);
|
if (descriptor != null)
|
{
|
//名称
|
var displayNameAttri = (DisplayNameAttribute)descriptor.Attributes[typeof(DisplayNameAttribute)];
|
if (displayNameAttri != null && !string.IsNullOrEmpty(displayNameAttri.DisplayName))
|
{
|
e.Caption = displayNameAttri.DisplayName;
|
}
|
}
|
}
|
|
//自定义属性值显示
|
private void propertyGridControl1_CustomDrawRowValueCell(object sender, CustomDrawRowValueCellEventArgs e)
|
{
|
//行字段名称
|
var fieldName = e.Row.Properties.FieldName.Split(new char[] { '.' }).Last();
|
if (string.IsNullOrEmpty(fieldName))
|
{
|
return;
|
}
|
//行类型全名称
|
var fullTypeName = e.Row.Properties.RowType.FullName;
|
|
if (fullTypeName == typeof(DateTime).FullName)
|
{
|
e.CellText = ((DateTime)e.Properties.Value).ToString("yyyy-MM-dd HH:mm:ss");
|
}
|
else if (fullTypeName == typeof(string[]).FullName)
|
{
|
var stringValue = (string[])e.Properties.Value;
|
e.CellText = stringValue?.Length.ToString();
|
}
|
else if (fullTypeName == typeof(DictionaryPropertyAdapter).FullName)
|
{
|
e.CellText = string.Empty;
|
}
|
else
|
{
|
var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row);
|
if (descriptor != null)
|
{
|
var displayUnitAttri = (DisplayUnitAttribute)descriptor.Attributes[typeof(DisplayUnitAttribute)];
|
if (displayUnitAttri != null)
|
{
|
if (e.Properties.Value != null)
|
{
|
e.CellText = e.Properties.Value.ToString() + " " + displayUnitAttri.Unit;
|
}
|
}
|
}
|
}
|
}
|
|
//属性编辑框的显示与取消
|
private void propertyGridControl1_ShowingEditor(object sender, CancelEventArgs e)
|
{
|
var rowTypeFullName = this.propertyGridControl1.FocusedRow.Properties.RowType.FullName;
|
var fieldName = this.propertyGridControl1.FocusedRow.Properties.FieldName.Split(new char[] { '.' }).Last();
|
|
if (rowTypeFullName == typeof(Image).FullName)
|
{
|
e.Cancel = true;
|
return;
|
}
|
|
var descriptor = this.propertyGridControl1.GetPropertyDescriptor(this.propertyGridControl1.FocusedRow);
|
|
if (this.AllowEdit)
|
{
|
var showEditor = (ShowEditorAttribute)descriptor.Attributes[typeof(ShowEditorAttribute)];
|
if (showEditor != null)
|
{
|
if (!showEditor.ShowEditor)
|
{
|
e.Cancel = true;
|
return;
|
}
|
}
|
}
|
else
|
{
|
var showEditorInView = (ShowEditorInViewAttribute)descriptor.Attributes[typeof(ShowEditorInViewAttribute)];
|
if (showEditorInView == null)
|
{
|
e.Cancel = true;
|
return;
|
}
|
if (!showEditorInView.ShowEditor)
|
{
|
e.Cancel = true;
|
return;
|
}
|
}
|
}
|
|
//编辑框
|
private void propertyGridControl1_CustomRecordCellEdit(object sender, GetCustomRowCellEditEventArgs e)
|
{
|
var fieldName = e.Row.Properties.FieldName.Split(new char[] { '.' }).Last();
|
if (string.IsNullOrEmpty(fieldName))
|
{
|
return;
|
}
|
var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row);
|
var rowTypeFullName = e.Row.Properties.RowType.FullName;
|
|
#region bool
|
|
if (rowTypeFullName == typeof(bool).FullName)
|
{
|
var ckEdit = new RepositoryItemCheckEdit();
|
ckEdit.CheckStyle = DevExpress.XtraEditors.Controls.CheckStyles.Standard;
|
if (e.Row.Properties.ReadOnly == true)
|
{
|
ckEdit.ReadOnly = true;
|
}
|
e.RepositoryItem = ckEdit;
|
}
|
|
#endregion
|
|
#region 富文本
|
|
if (descriptor != null)
|
{
|
var attri_multi = (MultiTextAttribute)descriptor.Attributes[typeof(MultiTextAttribute)];
|
if (attri_multi != null)
|
{
|
var memoEdit = new RepositoryItemMemoEdit();
|
if (e.Row.Properties.ReadOnly == true)
|
{
|
memoEdit.ReadOnly = true;
|
}
|
e.RepositoryItem = memoEdit;
|
}
|
}
|
|
#endregion
|
|
#region 图片
|
|
if (rowTypeFullName == typeof(Image).FullName)
|
{
|
var picEdit = new RepositoryItemPictureEdit();
|
picEdit.ReadOnly = true;
|
picEdit.NullText = "空";
|
e.RepositoryItem = picEdit;
|
e.Row.Expanded = true;
|
}
|
|
#endregion
|
|
|
|
}
|
|
//刷新
|
private void barBtnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
this.RefreshDataEvent?.Invoke();
|
}
|
|
|
}
|
}
|