如何在gridview中筛选devexpress lookupedit数据源

本文关键字:devexpress lookupedit 数据源 筛选 gridview | 更新日期: 2023-09-27 18:25:07

我有一个包含4列的DevExpress网格视图。第一列是RepositoryLookUpEdit,其中包含一些数据,例如CarTypes。第二列是带有Cars的Repository LookUpEdit。第三个是包含用户评论的EditBox存储库最后一列是一个删除行的简单按钮。

当更改第一列的值时,我希望每行过滤第二列的数据。例如,当选择SUV时,我想在第二列存储库中只显示CarType=SUV的汽车。

有人能帮我解决这个问题吗?感谢

如何在gridview中筛选devexpress lookupedit数据源

实现起来很简单。。至于组合框中不同行的不同值,为了引入此功能,您可以在编辑器显示后动态筛选底层查找数据源。这应该通过处理ShownEditor事件来完成。

using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Grid;
private DataView clone = null;
private void gridView1_ShownEditor(object sender, System.EventArgs e) {
    GridView view = sender as GridView;
    if (view.FocusedColumn.FieldName == "CityCode" && view.ActiveEditor is LookUpEdit) {
        Text = view.ActiveEditor.Parent.Name;
        DevExpress.XtraEditors.LookUpEdit edit;
        edit = (LookUpEdit)view.ActiveEditor;
        DataTable table = edit.Properties.DataSource as DataTable;
        clone = new DataView(table);
        DataRow row = view.GetDataRow(view.FocusedRowHandle);
        clone.RowFilter = "[CountryCode] = " + row["CountryCode"].ToString();
        edit.Properties.DataSource = clone;
    }
}
private void gridView1_HiddenEditor(object sender, System.EventArgs e) {
    if (clone != null) {
        clone.Dispose();
        clone = null;
    }
}

请参阅"如何根据第一个LookUp列的值筛选第二个LookUp"一文,这篇文章更详细地描述了这种方法。

参考文献:
如何:根据另一列值筛选LookUp(ComboBox)列

我从https://www.devexpress.com/Support/Center/Question/Details/A237并且工作完美!

我使用了@NiranjanKala提议的ShownEditor事件。检查编辑的列是否正确,然后使用新的数据源重新加载repository lookUpEdit datasource

private void myCarsGridView_ShownEditor(object sender, EventArgs e)
{
    try
    {
        ColumnView view = (ColumnView)sender;
        if (view.FocusedColumn.FieldName == "CarType.Id" && view.ActiveEditor is LookUpEdit)
        {
            LookUpEdit edit = (LookUpEdit)view.ActiveEditor;
            int carTypeId = (int)view.GetFocusedRowCellValue("CarType.Id");
            IList<Car> filteredCars = _controller.GetCarsByType(carTypeId);
            edit.Properties.DataSource = filteredCars;
        }
    }
    catch (System.Exception ex)
    {
        //Log
    }
}