I created a form with two controls dataGridView1
and 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";
}
}
}
However, clicking button1
doesn't show the changed values in the form? Debugging in Visual Studio shows the values have been set.
Update:
I changed the code to the following to use DataTable. However, clicking the button still doesn't update the 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;
}
}