在使用GridControl时,可能会有需求要求某2列显示RepositoryItemLookUpEdit控件,而且在选择第一列的值时,第2列绑定的数据源发生变化。当然这在其他地方很容易实现,但是在GridControl的列中就不能用以往的思维方式进行了,因为在GridControl中,你只有选中这一列,它才会显示出该列所绑定控件的特性,否则只是一个普通的lable。
基本思路:在点击第2列时才去获取第一列选中的值,然后根据该值查询出第2列的数据进行绑定。
方法/步骤
1. 1
1. RepositoryItemLookUpEdit控件的创建,我是在CustomRowCellEditForEditing这个事件下处理的。(因为我所需要显示RepositoryItemLookUpEdit的列是动态创建的,所以需要这样创建,如果你是固定显示,直接绑定RepositoryItemLookUpEdit点击事件就可以了。)在这个事件里面,还可以控制某一列不同行显示不同控件。(因为Devexpress是只能设置某一列控件的属性的,不能精准到控制每个单元格中的控件)
/
/DEPOT 堆场列 级联 PORT港口列
private void Frm _Load(object sender, EventArgs e)
{
    gridView.CustomRowCellEditForEditing += gridView_CustomRowCellEditForEditing;
}
void gridView_CustomRowCellEditForEditing(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e)
        {
            DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView;
            DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit lue = new DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit();
            switch (e.Column.FieldName)
            {
                case "DEPOT":
                    //获取该行port
                    string portFilter = view.GetRowCellValue(e.RowHandle, "PORT").ToString();
                    if (portFilter != null && portFilter != "")
                    {
                        this.depotBindingSource.Filter = string.Format("Port='{0}'", portFilter);
                    }
                    else
                    {
                        //自定义一个查不到结果的 过滤条件
                        lue.DataSource = jquery获取下拉框选中值this.depotBindingSource.Filter = string.Format("Port='123456'", portFilter);
                    }
                    #region RepositoryItemLookUpEdit 格式化
                    lue.DataSource = depotBindingSource;
                    lue.DisplayMember = "CODE";
                    lue.ValueMember = "CODE";                 
                    lue.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
                    lue.Columns.AddRange(new DevExpress.XtraEditors.Controls.LookUpColumnInfo[] {
            new DevExpress.XtraEditors.Controls.LookUpColumnInfo("CODE", 90, "Code"),
            new DevExpress.XtraEditors.Controls.LookUpColumnInfo("Desp", 350, "Desp"),
            new DevExpress.XtraEditors.Controls.LookUpColumnInfo("Port", 60, "Port")});                   
                    lue.PopupFormMinSize = new System.Drawing.Size(500, 0);
                    lue.PopupWidth = 500;         
                    #endregion
                    //LookUpEdit值改变后触发
                    lue.EditValueChanged += lue_EditValueChanged;
                    //下拉框选中值后,需要进行转换
                    lue.ParseEditValue += lue_ParseEditValue;
                    //指定该列控件
                    e.RepositoryItem = lue;
                    break;
            }
        }
2. //选择RepositoryItemLookUpEdit的值时进行的处理。
    void lue_EditValueChanged(object sender, EventArgs e)
        {
            DevExpress.XtraEditors.BaseEdit edit = gridView.ActiveEditor;           
            switch (gridView.FocusedColumn.FieldName)
            {               
                case "DEPOT"://堆场 列
                    gridView.SetFocusedRowCellValue(gridView.Columns["DEPOT"], edit.EditValue);
                    break;
            }
        }
3. //grid中的下拉框必须要处理一下,不然会报(对象必须实现iconvertible) 错误
        void lue_ParseEditValue(object sender, DevExpress.XtraEditors.Controls.ConvertEditValueEventArgs e)
        {
            if (e.Value != null)
                e.Value = e.Value.ToString();
            else
                e.Value = "";
            e.Handled = true;
        }   

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。