c# – 绑定到List的可编辑DataGridView
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 绑定到List的可编辑DataGridView,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2353字,纯文字阅读大概需要4分钟。
内容图文
![c# – 绑定到List的可编辑DataGridView](/upload/InfoBanner/zyjiaocheng/785/72547e5a05e949da85ff94e9a4d1538d.jpg)
我有一个绑定到列表的DataGridView.值显示正常,当我单击某个值时,它会开始编辑,但是当我按Enter键时,将忽略更改,不会更改任何数据.当我在Value setter中放置一个断点时,我可以看到它在编辑后执行,但是没有显示任何已更改的数据.我的绑定代码如下所示:
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或其他?
解决方法:
问题是您使用结构作为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是一个好主意,类会更好.
内容总结
以上是互联网集市为您收集整理的c# – 绑定到List的可编辑DataGridView全部内容,希望文章能够帮你解决c# – 绑定到List的可编辑DataGridView所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。