【问题标题】:Winform C# Update DataGridView on DataTable Cell value changedWinform C# 更新 DataTable 单元格值上的 DataGridView 已更改
【发布时间】:2015-08-21 12:32:56
【问题描述】:

我有DataGridView和DataTable,DataTable在DataGridView中被分配为数据源。

当我更改 DataTable 中的某些值时,视图不会更新。

那么我怎样才能做到这一点

我已经尝试过以下事情

  1. 绑定源
  2. 刷新()

演示代码

DataGridView datagrid = new DataGridView();
DataTable dt = new DataTable();

dt.Columns.Add("No");
dt.Columns.Add("Name");

for (int i = 1; i <= 10; i++)
{
     DataRow row = dt.NewRow();
     row[0] = i;
     row[1] = "ABC";
     dt.Rows.Add(row);
}

datagrid.DataSource = dt;

这是我上面的代码

当我更改 DataTable 中的某些值时,它不会反映在 DataGridView 中

dt.Rows[0][1] = "XYZ";

所以请帮帮我....

【问题讨论】:

  • 您在什么情况下更改值?
  • @thewisegod 一些按钮点击事件我改变了数据表中的值
  • 如何从点击事件中获取对数据表的引用?数据表是否在页面级别声明?
  • 我正在开发 Winform App,并将 DataTable 声明为成员变量

标签: c# winforms datagrid


【解决方案1】:

我能够做到这一点,这很有效:

private DataTable _dt = new DataTable();  

private void Form1_Load(object sender, EventArgs e)
{

    _dt.Columns.Add("LongText");
    DataRow dr = _dt.NewRow();
    dr[0] = "One";
    _dt.Rows.Add(dr);
    dr = _dt.NewRow();
    dr[0] = "Two";
    _dt.Rows.Add(dr);
    dr = _dt.NewRow();
    dr[0] = "Three";
    _dt.Rows.Add(dr);
    dataGridView1.DataSource = _dt;
}

private void button1_Click(object sender, EventArgs e)
{
    _dt.Rows[0][0] = "daddy";
}

【讨论】:

  • 是的,我想这样做..以这种方式但不知道为什么它不适合我
  • 那么你的代码是这样设置的吗?如果是这样,那肯定很奇怪。
  • 请在按钮单击事件中设置 DatagridView 数据源集部分。然后它工作了吗?
  • 是的,但我没有在表单加载事件中分配数据源
  • 能否请您发布您的确切设置?同样在上面的代码中,如果我将数据源分配移动到按钮单击,我会看到“爸爸”而不是“一个”,正如预期的那样。
【解决方案2】:

您需要将数据网格添加到表单中,如下所示:

    private void Form1_Load(object sender, EventArgs e)
    {
        DataGridView datagrid = new DataGridView();

        DataTable dt = new DataTable();

        //add this line
        Controls.Add(datagrid);

        dt.Columns.Add("No");
        dt.Columns.Add("Name");

        for (int i = 1; i <= 10; i++)
        {
            DataRow row = dt.NewRow();
            row[0] = i;
            row[1] = "ABC";
            dt.Rows.Add(row);
        }

        datagrid.DataSource = dt;

        dt.Rows[0][1] = "XYZ";
    }

结果:

【讨论】:

  • 我通过设计器将datagridview添加到表单中
  • 好的...但是您的代码显示数据网格是在后面的代码中创建的,而不是通过设计器:DataGridView datagrid = new DataGridView();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多