DevExpress GridControl同一列根据不同的数据类型加载不同的编辑控件
稍加改动,就可以实现一个完整的查询功能
废话少说,直接上代码:
using DevExpress.XtraEditors.Repository; using DevExpress.XtraGrid.Columns; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); var cb = new RepositoryItemComboBox() { TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor }; cb.Items.Add(""); gridControl1.RepositoryItems.Add(cb); gridView1.Columns.AddRange(new GridColumn[] { new GridColumn() { Caption = "选项", FieldName = "FieldName", ColumnEdit = cb, Visible = true }, new GridColumn() { Caption = "值", FieldName = "Value", Visible = true } }); var dt = new Source(); dt.AddField("文本", SqlDbType.NVarChar); dt.AddField("日期", SqlDbType.SmallDateTime); dt.AddData(""); dt.AddData(""); dt.Fields.ForEach(x => { cb.Items.Add(x.FieldName); }); gridControl1.DataSource = dt.Datas; cb.EditValueChanged += (s, e) => { dt.Datas[gridView1.GetFocusedDataSourceRowIndex()].Value = null; }; gridView1.CustomRowCellEdit += (s, e) => { if (e.Column.FieldName != "Value") return; var item = dt.Fields.Find(x => { return x.FieldName == gridView1.GetRowCellValue(e.RowHandle, "FieldName").ToString(); }); if (item != null) e.RepositoryItem = item.Editor; }; } } public partial class Source { public virtual List<Field> Fields { get; } = new List<Field>(); public virtual BindingList<Data> Datas { get; set; } = new BindingList<Data>(); public virtual Data AddData(string fieldname, object value = null) { var r = new Data(fieldname, value); Datas.Add(r); return r; } public virtual Field AddField(string fieldname, SqlDbType type) { var r = CreateEditor(type); if (r != null) { var f = new Field(fieldname, r); Fields.Add(f); return f; } else return null; } protected virtual RepositoryItem CreateEditor(SqlDbType type) { if (type == SqlDbType.NVarChar || type == SqlDbType.NChar) { var edit = new RepositoryItemTextEdit(); return edit; } else if (type == SqlDbType.Date || type == SqlDbType.DateTime || type == SqlDbType.SmallDateTime) { var date = new RepositoryItemDateEdit(); return date; } else return null; } public partial class Field { public string FieldName { get; set; } = ""; public RepositoryItem Editor { get; set; } = null; public Field() { } public Field(string fieldname, RepositoryItem editor) { FieldName = fieldname; Editor = editor; } } public partial class Data : INotifyPropertyChanged { string _fieldname = ""; object _value = null; public string FieldName { get { return _fieldname; } set { _fieldname = value; OnPropertyChanged("FieldName"); } } public object Value { get { return _value; } set { _value = value; OnPropertyChanged("Value"); } } public Data() { } public Data(string fieldname, object value) { _fieldname = fieldname; _value = value; } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string name) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } } } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。