我有一个 DataGridView
我将它绑定(bind)到 BindingList<KeyValuePair<string, float>>
.这是代码的相关部分:
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;
但第二列仍然不可编辑。我应该怎么做才能使第二列可编辑而第一列不可编辑?
编辑:我希望更改反射(reflect)在 BindingList
上实例本身。
编辑 2: 我在代码末尾添加了这一行,现在出现错误:
dgv.Columns[1].ReadOnly = false;
我收到这个错误:
DataGridView column bound to a read-only field must have ReadOnly set to True.
编辑 3: 问题似乎是我正在使用 KeyValuePair
在我的列表中。
最佳答案
问题原来是 KeyValuePair
类的 Key
和 Value
属性是只读的。解决方案是创建一个新类,该类具有表示数据的 public setter
。
关于c# - 将 DataGridView 列绑定(bind)到 BindingList<T> 后使其可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234493/