2011-04-20 149 views
0

我正在嘗試在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。這是一個可行的解決方案,還是可能有另一個我沒有考慮/意識到的選擇?

對不起,問題的文章,但我只是想嘗試,並解釋一切,所以世界上沒有混亂,我問什麼:)

在此先感謝。

+0

首選項的列表將是一個不錯的方式被用來去 – V4Vendetta 2011-04-20 11:30:04

+0

你的意思是我作爲替代或使用目前List集合提到的優先等級的陣列? – TheRarebit 2011-04-21 08:39:45

+0

是的,類似於雅各布所建議的 – V4Vendetta 2011-04-21 08:53:01

回答

2
GridView.DataSource = Preferences 
    .Select(p => new Preference {Description = p.Key, Selected = p.Value}) 
    .ToList(); 
GridView.Columns[0].DataPropertyName = "Description"; 
GridView.Columns[1].DataPropertyName = "Selected"; 
+0

感謝您的回覆@Jacob Seleznev。儘管我不得不做出一兩個調整,但我已經設法使它符合您提出的建議。 Preference類中不存在p.Key和p.Value,所以我假設這是一個錯字,除非我錯過了某些東西? 我只需要弄清楚現在如何將Selected屬性綁定到Settings.Default命名空間中的布爾值,以便它按照我的意願工作(任何建議都將不勝感激),但現在我可以得到我想要的解決方案,非常感謝。 – TheRarebit 2011-04-26 15:21:04

+0

p不是首選p是KeyValuePair 2011-04-27 11:20:43