如何在gridview中筛选devexpress lookupedit数据源
本文关键字:devexpress lookupedit 数据源 筛选 gridview | 更新日期: 2023-09-27 18:25:07
我有一个包含4列的DevExpress网格视图。第一列是RepositoryLookUpEdit,其中包含一些数据,例如CarTypes。第二列是带有Cars的Repository LookUpEdit。第三个是包含用户评论的EditBox存储库最后一列是一个删除行的简单按钮。
当更改第一列的值时,我希望每行过滤第二列的数据。例如,当选择SUV时,我想在第二列存储库中只显示CarType=SUV的汽车。
有人能帮我解决这个问题吗?感谢
实现起来很简单。。至于组合框中不同行的不同值,为了引入此功能,您可以在编辑器显示后动态筛选底层查找数据源。这应该通过处理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
}
}