DataGridView - 动态更新值

时间:2014-01-12 12:38:39

标签: c# datagridview

我想在按下行标题时动态更新DataGridView单元格的值。

值会更新,但视图不会刷新。

void OnRowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    var databaseRecordId = e.RowIndex;
    dataGridView1.Rows[e.RowIndex].Cells[0].Value = false;
}

简单的解决方案好吗?

4 个答案:

答案 0 :(得分:1)

你可以在更新后把它放在:

dataGridView1.refresh();

只是为了看看它是否有帮助,否则我还有其他一些想法。

答案 1 :(得分:1)

您的代码是正确无误的。

private void dgvNews_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
        var databaseRecordId = e.RowIndex;
        dgvNews.Rows[e.RowIndex].Cells[0].Value = "AAAAAA";
}

答案 2 :(得分:0)

dataGridView1[0, e.RowIndex].Value = false;
dataGridView1.EndEdit();

或:

dataGridView1[0, e.RowIndex].Value = false;
dataGridView1.RefreshEdit();

答案 3 :(得分:0)

您的代码适合我。 我尝试了一个数据源,它是一个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;
}

虽然这有效(使用布尔列编辑)

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;
    }

我希望这会有所帮助。