c# - 将 DataGridView 列绑定(bind)到 BindingList<T> 后使其可编辑

标签 c# binding datagridview bindinglist

我有一个 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 类的 KeyValue 属性是只读的。解决方案是创建一个新类,该类具有表示数据的 public setter

关于c# - 将 DataGridView 列绑定(bind)到 BindingList<T> 后使其可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234493/

相关文章:

c# - C#中的延迟执行

c# - 有什么方法可以修改 Visual Studio 模板中的现有文件?

c# - 枚举和字符串匹配

vb.net - Vb.Net Datagridview错误处理

C# DataGridView 在同一个单元格中显示图像和文本

c# - 无法检索元数据 - MVC 应用程序

events - 绑定(bind)中的 Angular 2 绑定(bind)。事件内插值

c# - WPF 绑定(bind) RelativeSource

c# - DataGridView 反复重新创建列

wpf - 绑定(bind) GradientStop 有效但报告错误