我正在嘗試在Windows窗體中構建DataGridView以向用戶顯示可打開和關閉的設置列表。 DatGridView將有兩列,第一列將描述設置,第二列將包含一個複選框,允許用戶打開或關閉設置。因此,例如在DataGridView會是什麼樣子:將DataGridViewCheckBoxColumn綁定到布爾值數組
| Descriptions | Set |
---------------------------------
| Description 1 | true |
| Description 2 | false |
| Description 3 | false |
...
在我的項目設置,我現在有一個布爾值的列表,PREF1,PREF2,Pref3等,我想在DataGridView中綁定的複選框,以便他們可以被自動操作,而不必在單元格值被編輯時做任何手動檢查,因此我可以在應用程序的不同實例之間保存更改。
我試圖尋找一個幾個解決方案和整個以下來了,把它添加到窗體構造函數:
// Build preference dictionary
Dictionary<String, bool> Preferences = new Dictionary<String, bool>();
preferences.Add("Description 1", Settings.Default.Pref1);
preferences.Add("Description 2", Settings.Default.Pref2);
....
// Copy dictionary to list
List<KeyValuePair<String, bool>> PreferenceList = new List<KeyValuePair<String, bool>>();
foreach (KeyValuePair<String, bool> item in Preferences)
PreferenceList.Add(item);
// Set the GridView DataSource and values displayed in each column
GridView.AutoGenerateColuns = false;
GridView.DataSource = new BindingList<KeyValuePair<String, bool>>(PreferenceList);
GridView.Columns[0].DataPropertyName = "Key";
GridView.Columns[1].DataPropertyName = "Value";
當表單加載的DataGridView填充的預期,但在第二個欄的複選框不能被操縱。經過一些調試後,我沒有注意到,當我將DataPropertyName設置爲「Value」時,第二列變爲ReadOnly,並且我無法在不引發異常的情況下更改此ReadOnly設置。
有沒有解決這個只讀問題的方法?我也看到了,想着創造我自己的愛好級別的東西沿着線:
public Class Preference
{
public String Description { get, set }
public bool Selected { get, set }
}
,然後創建這些偏好的數組,每個偏好的「選擇」屬性綁定到我的設置中的布爾之一然後將Preference數組設置爲DataGridViews DataSource。這是一個可行的解決方案,還是可能有另一個我沒有考慮/意識到的選擇?
對不起,問題的文章,但我只是想嘗試,並解釋一切,所以世界上沒有混亂,我問什麼:)
在此先感謝。
首選項的列表將是一個不錯的方式被用來去 – V4Vendetta 2011-04-20 11:30:04
你的意思是我作爲替代或使用目前List集合提到的優先等級的陣列? – TheRarebit 2011-04-21 08:39:45
是的,類似於雅各布所建議的 – V4Vendetta 2011-04-21 08:53:01