2012-11-05 41 views
2

我有一個DataGridView,我將它綁定到BindingList<KeyValuePair<string, float>>。以下是代碼的相關部分:將DataGridView列綁定到BindingList後編輯它<T>

 dgv.AutoGenerateColumns = false; 

     DataGridViewTextBoxColumn firstColumn = new DataGridViewTextBoxColumn(); 
     firstColumn.DataPropertyName = "Key"; 
     firstColumn.HeaderText = "First Column"; 

     DataGridViewTextBoxColumn secondColumn = new DataGridViewTextBoxColumn(); 
     secondColumn.DataPropertyName = "Value"; 
     secondColumn.HeaderText = "Second Column"; 
     secondColumn.ReadOnly = false; 
     secondColumn.ValueType = typeof(float); 

     dgv.Columns.Add(firstColumn); 
     dgv.Columns.Add(secondColumn); 
     dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 
     dgv.MultiSelect = false; 
     dgv.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2; 
     dgv.ReadOnly = false; 

     _bindingList = new BindingList<KeyValuePair<string, float>>(_someList); 
     dgv.DataSource = _bindingList; 

但是第二列仍然不可編輯。我應該怎麼做才能使第二欄可編輯,而第一欄不可以?

編輯:我希望更改反映在BindingList實例本身。

編輯2:我已經在代碼末尾添加這一行,現在我得到一個錯誤:

 dgv.Columns[1].ReadOnly = false; 

我得到這個錯誤:

DataGridView column bound to a read-only field must have ReadOnly set to True.

編輯3:問題似乎是我在我的清單中使用KeyValuePair s。

+0

此時,您的BindingList是否有任何數據? – Derek

+0

它確實有數據。我可以看到'BindingList'中的所有元素。但我無法編輯第二列。 – hattenn

回答

7

問題原來是KeyValuePair類的KeyValue屬性是隻讀的。解決方案是創建一個具有public setter s的新類來表示數據。

相關問題