我遇到了Marc Gravell对 Matt 发布的问题的优雅而机智的解决方案(标题“ C#/winforms: how to best bind a propertygrid and a System.Data.DataRow ”),并在我的一个应用程序中使用了相同的解决方案.
使用 Marc 代码的一些摘录:
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Foo", typeof(int));
table.Columns.Add("Bar", typeof(string));
table.Columns.Add("Audit", typeof(DateTime));
table.Rows.Add(1, 14, "abc", DateTime.MinValue);
DataRow row = table.Rows.Add(2,13,"def", DateTime.MinValue);
table.Rows.Add(3, 24, "ghi", DateTime.MinValue);
RowWrapper wrapper = new RowWrapper(row);
wrapper.Exclude.Add("ID");
wrapper.Exclude.Add("Bar");
我能够以某种方式使用 DataGridView 完成这项工作;DataGridView 使用表作为它的源,而每次单击 DataGridView 上的一行都会被设置为 propertyGrid1 的 SelectedObject (使用 Marc 的 RowWrapper ),并且它工作得很好。你可能会问我为什么要这样做,意思是同时使用 DataGridView 和 PropertyGrid;事实上,业务需求和狭隘的管理政策。
无论如何,我现在有另一个困境;表中的一列,例如“Foo”(顺便说一下,它在 PropertyGrid 中显示为字段之一)应该是 PropertyGrid 中的某种下拉列表。我的意思是,“Foo”应该是一个组合框,其中包含从另一个 DataTable 派生的项目列表。另外,有没有办法为每个字段项包含某种描述?
这可以做到吗?Marc Gravell 提到了类似“请注意,您可以在该区域执行其他操作,以使某些属性不可编辑 (IsReadOnly),或具有不同的标题 (DisplayName) 或类别 (Category) - 通过覆盖 RowWrapperDescriptor 中的其他成员. ”作为他帖子的结尾注释,我想知道有没有办法做到这一点。
非常感谢任何理论建议。非常感谢。