我碰到馬克Gravell的elegant and witty solution張貼由馬特(標題爲‘C#/winforms: how to best bind a propertygrid and a System.Data.DataRow’)的問題,並已在一個使用相同的解決方案我應用。關於馬克Gravell的RowWrapperDescriptor結合System.Data.Rows到PropertyGrid的
使用一些摘錄從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。「作爲他的帖子的結束語,我想知道是否有辦法做到這一點。
任何理論上的建議,非常感謝。非常感謝。
這可能是一個想法退後一步;你試圖達到什麼效果?所以:你有一個'DataTable';你想......? [在這裏填空......]。 –
「做到這一點的方式」完全如上所述;重寫'IsReadOnly'或'DisplayName'等。DataGridView中沒有「category」。對於下拉列表,我懷疑你必須通過手動修改DataGridView屬性(可能手動添加列作爲下拉列)來手動執行該操作。但沒有關於什麼是/不工作的更多信息,很難更具體。 –