gpt4 book ai didi

c# - 绑定(bind)到列表的可编辑 DataGridView

转载 作者:太空狗 更新时间:2023-10-30 01:21:04 24 4
gpt4 key购买 nike

我有一个绑定(bind)到列表的 DataGridView。值显示正常,当我点击一个值时,它开始编辑,但是当我按 Enter 时,更改被忽略,没有数据被更改。当我在 Value setter 中放置一个断点时,我可以看到它在编辑后执行,但从未显示任何更改的数据。我的绑定(bind)代码如下所示:

namespace DataGridViewList
{
public partial class Form1 : Form
{
public struct LocationEdit
{
public string Key { get; set; }
private string _value;
public string Value { get { return _value; } set { _value = value; } }
};

public Form1()
{
InitializeComponent();
BindingList<LocationEdit> list = new BindingList<LocationEdit>();
list.Add(new LocationEdit { Key = "0", Value = "Home" });
list.Add(new LocationEdit { Key = "1", Value = "Work" });
dataGridView1.DataSource = list;
}
}
}

该项目是一个基本的 Windows 窗体项目,在设计器中创建了一个 DataGrid,其中包含名为 Key 和 Value 的列,并将 DataPropertyName 分别设置为 Key/Value。没有值设置为只读。

我是否缺少某些步骤?我是否需要实现 INotifyPropertyChanged 或其他东西?

最佳答案

问题是您正在使用 struct 作为 BindingList 项目类型。解决方案是您应该将 struct 更改为 class 并且效果很好。但是如果你想继续使用struct,我有一个想法让它工作,当然它需要更多的代码而不是简单地将struct更改为class。整个想法是每次单元格的值发生变化时,底层项目(它是一个结构)应该被分配给一个全新的结构项目。这是您可以用来更改基础值的唯一方法,否则提交更改后的单元格值将不会更改。我发现事件 CellParsing 是适合这种情况添加自定义代码的事件,这是我的代码:

namespace DataGridViewList
{
public partial class Form1 : Form
{
public struct LocationEdit
{
public string Key { get; set; }
private string _value;
public string Value { get { return _value; } set { _value = value; } }
};

public Form1()
{
InitializeComponent();
BindingList<LocationEdit> list = new BindingList<LocationEdit>();
list.Add(new LocationEdit { Key = "0", Value = "Home" });
list.Add(new LocationEdit { Key = "1", Value = "Work" });
dataGridView1.DataSource = list;
}
//CellParsing event handler for dataGridView1
private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e){
LocationEdit current = ((BindingList<LocationEdit>)dataGridView1.DataSource)[e.RowIndex];
string key = current.Key;
string value = current.Value;
string cellValue = e.Value.ToString()
if (e.ColumnIndex == 0) key = cellValue;
else value = cellValue;
((BindingList<LocationEdit>)dataGridView1.DataSource)[e.RowIndex] = new LocationEdit {Key = key, Value = value};
}
}
}

我认为以这种方式继续使用 struct 不是一个好主意,class 会更好。

关于c# - 绑定(bind)到列表的可编辑 DataGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16808590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com