C# DataGridView-动态更新值
我想在按下行标题时动态更新DataGridView单元格的值 该值会更新,但视图不会刷新C# DataGridView-动态更新值,c#,datagridview,C#,Datagridview,我想在按下行标题时动态更新DataGridView单元格的值 该值会更新,但视图不会刷新 void OnRowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { var databaseRecordId = e.RowIndex; dataGridView1.Rows[e.RowIndex].Cells[0].Value = false; } 请提供简单的解决方案?您能在更新后添加以下内容吗:
void OnRowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
var databaseRecordId = e.RowIndex;
dataGridView1.Rows[e.RowIndex].Cells[0].Value = false;
}
请提供简单的解决方案?您能在更新后添加以下内容吗: dataGridView1.refresh() 只是想看看它是否有帮助,否则我还有其他一些想法
dataGridView1[0, e.RowIndex].Value = false;
dataGridView1.EndEdit();
或:
你的代码对我有用。
我尝试了一个数据源,它是数据表或对象列表
您的数据源的类型是什么
恐怕您正在使用匿名类型作为数据源,请记住它是只读的,因此无法更新
您可以使用dataTable,或者我可以为您提供一个将匿名类型转换为dataTable的方法
这不起作用:
List<MyClass> myList = new List<MyClass>();
myList.Add(new MyClass() { URL = "A", Path = "1" });
myList.Add(new MyClass() { URL = "B", Path = "2" });
myList.Add(new MyClass() { URL = "C", Path = "3" });
myList.Add(new MyClass() { URL = "D", Path = "4" });
myList.Add(new MyClass() { URL = "E", Path = "5" });
dataGridView1.DataSource = (from a in myList select new
{
URL = a.URL,
Path = a.Path
}).ToList();
private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
var databaseRecordId = e.RowIndex;
dataGridView1.Rows[e.RowIndex].Cells[0].Value = 555;
}
我希望这会有所帮助。您的代码是正确的,并且可以正常工作
private void dgvNews_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
var databaseRecordId = e.RowIndex;
dgvNews.Rows[e.RowIndex].Cells[0].Value = "AAAAAA";
}
问题只在于布尔类型。对不起,我没有理解你的意思。你的意思是可以更新匿名类型数据源中的字符串类型吗?尝试使用带有布尔列的DataTable,可以看到结果。我刚刚尝试过,效果很好。也不需要刷新()或刷新编辑()。将此
x.Columns.Add(“Boolean”)
添加到x.Columns.Add(“Boolean”,typeof(bool))
并重试。问题仅出现在CheckBoxColumn中。
DataTable x = new DataTable();
x.Columns.Add("URL");
x.Columns.Add("PAth");
x.Columns.Add("Boolean");
x.Rows.Add("A", "1", true);
x.Rows.Add("B", "1" , false);
x.Rows.Add("C", "1" , true);
x.Rows.Add("D", "1" , true);
x.Rows.Add("E", "1", true);
x.Rows.Add("F", "1", true);
x.Rows.Add("G", "1",true);
dataGridView1.DataSource = x;
private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
var databaseRecordId = e.RowIndex;
dataGridView1.Rows[e.RowIndex].Cells[2].Value = false;
}
private void dgvNews_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
var databaseRecordId = e.RowIndex;
dgvNews.Rows[e.RowIndex].Cells[0].Value = "AAAAAA";
}