c# - 将列添加到绑定(bind)到 DataGridView 的 DataTable 不会更新 View

标签 c# winforms visual-studio-2008 datagridview datatable

我有一个从 CSV 文件填充的数据表,然后使用 DataGridView 在内存中编辑数据。据我了解,数据的编程编辑应该在用户编辑通过的 DataTable 上完成。 DataGridView。

但是,当我以编程方式将列添加到 DataTable 时,它​​不会自动反射(reflect)在 DataGridView 中,我怀疑反之亦然。

如何保持两者并发?我认为数据绑定(bind)的想法是这是自动的......

也可以添加行。


已解决:

AutoGeneratedColumns 在设计器代码中设置为 false,尽管在​​属性对话框中为 true(并在代码中明确设置)。最初的列是以编程方式生成的,因此不应该出现,但是由于设计器代码还继续生成最初用于调试的“设计于”列,因此没有被采纳。

道德:检查自动生成的代码!

除此之外,参见 this postthis post

最佳答案

这听起来不对。为了对其进行测试,我编写了一个简单的应用程序,它创建了一个 DataTable 并向其中添加了一些数据。
button1.Click 上,它将表格绑定(bind)到 DataGridView。
然后,我添加了第二个按钮,单击该按钮时,会向基础 DataTable 添加另一列。
当我测试它并单击第二个按钮时,网格立即反射(reflect)了更新。

为了测试相反的情况,我添加了第三个按钮,它会弹出一个对话框,其中包含绑定(bind)到同一个 DataTable 的 DataGridView。然后在运行时,我向第一个 DataGridView 添加了一些值,当我单击按钮调出对话框时,更改会反射(reflect)出来。

我的观点是,它们应该保持并发。当 Mark 建议您检查 AutoGenerateColumns 是否设置为 true 时,Mark 可能是对的。不过,您不需要调用 DataBind,这仅适用于 Web 上的 DataGridView。也许您可以发布您正在做的事情,因为这应该有效。

我是如何测试它的:

DataTable table = new DataTable();
public Form1()
{
    InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
    table.Columns.Add("Name");
    table.Columns.Add("Age", typeof(int));
    table.Rows.Add("Alex", 26);
    table.Rows.Add("Jim", 36);
    table.Rows.Add("Bob", 34);
    table.Rows.Add("Mike", 47);
    table.Rows.Add("Joe", 61);

    this.dataGridView1.DataSource = table;
}

private void button2_Click(object sender, EventArgs e)
{
    table.Columns.Add("Height", typeof(int));
    foreach (DataRow row in table.Rows)
    {
        row["Height"] = 100;
    }
}

private void button3_Click(object sender, EventArgs e)
{
    GridViewer g = new GridViewer { DataSource = table };
    g.ShowDialog();
}

public partial class GridViewer : Form //just has a DataGridView on it
{
    public GridViewer()
    {
    InitializeComponent();
    }

    public object DataSource
    {
        get { return this.dataGridView1.DataSource; }
        set { this.dataGridView1.DataSource = value; }
    }
}

关于c# - 将列添加到绑定(bind)到 DataGridView 的 DataTable 不会更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/489425/

相关文章:

c++ - 如何使用 Application Verifier 在我的代码中找到真正的问题行?

c# - Cookie时间问题

visual-studio - 由于更改冲突,无法 checkin

c# - 如何在 C# 代码中找到属性的来源?

winforms - 您可以同时创建多少个 OpenGL 渲染上下文是否有限制?

c# - 报告哈希进度

c# - 更改 ListView 标题和网格线颜色

c# - 如何创建这样的任务面板?

c# - 如何在用户单击浏览器停止按钮时停止服务器端处理 (ASP.net C#)

c# - 如何识别PDF格式?