【发布时间】:2019-10-07 07:35:46
【问题描述】:
我创建了一个包含两个控件dataGridView1 和button1 的表单。
public partial class Form1 : Form
{
public List<Foo> ds { get; private set; }
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ds = new List<Foo> {
new Foo { A="abc" }, new Foo{B="bbb"}
};
dataGridView1.DataSource = new BindingList<Foo>(ds);
}
private void button1_Click(object sender, EventArgs e)
{
var foo = (Foo)dataGridView1.Rows[0].DataBoundItem;
foo.B = "1BBB";
foreach(DataGridViewRow x in dataGridView1.Rows)
{
if (x.DataBoundItem != null)
((Foo)x.DataBoundItem).C = "CCC";
}
}
}
但是,单击button1 不会在表单中显示更改的值?在 Visual Studio 中调试显示值已设置。
更新:
我将代码更改为以下以使用 DataTable。但是,单击按钮仍然不会更新 UI?
public partial class Form1 : Form
{
public List<Foo> ds { get; private set; }
private Dictionary<string, Foo> dict;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//ds = new List<Foo> {
// new Foo { A="abc" }, new Foo{B="bbb"}
//};
//dataGridView1.DataSource = new BindingList<Foo>(ds);
var dt = new DataTable();
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "A", Unique = true });
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "B", Unique = false });
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "C", Unique = false });
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "D", Unique = false });
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "E", Unique = false });
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "F", Unique = false });
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "G", Unique = false });
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "H", Unique = false });
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "I", Unique = false });
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "J", Unique = false });
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "K", Unique = false });
dt.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "L", Unique = false });
dt.PrimaryKey = new DataColumn[] { dt.Columns["A"] };
var row = dt.NewRow();
row["A"] = "1";
dt.Rows.Add(row);
row = dt.NewRow();
row["A"] = "2";
dt.Rows.Add(row);
row = dt.NewRow();
row["A"] = "3";
dt.Rows.Add(row);
dataGridView1.DataSource = dt;
}
private void button1_Click(object sender, EventArgs e)
{
var foo = (DataRowView)dataGridView1.Rows[0].DataBoundItem;
foo["B"] = "1BBB";
//foreach (DataGridViewRow x in dataGridView1.Rows)
//{
// if (x.DataBoundItem != null)
// ((Foo)x.DataBoundItem).C = "CCC";
//}
//dataGridView1.DataSource = ds;
}
}
【问题讨论】:
-
为什么要专门讨论这个问题?其实这对我来说是个有趣的问题。