c# - 更改绑定(bind)到 DataGridView 的 DataTable 中的列顺序不会反射(reflect)在 View 中

标签 c# .net winforms datagridview datatable

当应用程序运行时,DataGridView 绑定(bind)到 DataTable。后来我以编程方式向 DataTable 添加了更多列,它反射(reflect)在基础数据中 - 即列 Ordinals 是它们应该的。然而,这并未反射(reflect)在 DataGridView 中。相反,列会附加到最初生成的集合中。

这个例子演示了,

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public DataTable data = new DataTable();

    private void button1_Click(object sender, EventArgs e)
    {

        this.dataGridView1.DataSource = data;
        for (int i = 0; i < 5; i++)
        {
            this.data.Columns.Add(i.ToString());
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        DataColumn foo = new DataColumn();
        this.data.Columns.Add(foo);
        foo.SetOrdinal(0);
    }

    private void button3_Click(object sender, EventArgs e)
    {
        foreach (DataColumn tmpCol in this.data.Columns)
        {
            Console.WriteLine("{0} : {1}", tmpCol.ColumnName, tmpCol.Ordinal);
        }
    }
}

按钮 1 生成列,按钮 2 添加一列并将序号设置为 0,因此它应该在网格中排在第一位,按钮 3 显示列的序号并显示它们在 中的位置数据表

最佳答案

DataGridView 就是这样工作的;启用自动生成列后,额外的(未映射的)列将附加到末尾。您可以解除绑定(bind)并重新绑定(bind)来修复它;将 DataSource 设置为 null 并返回表:

this.dataGridView1.DataSource = null;
this.dataGridView1.Columns.Clear();
this.dataGridView1.DataSource = data;

关于c# - 更改绑定(bind)到 DataGridView 的 DataTable 中的列顺序不会反射(reflect)在 View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/499321/

相关文章:

c# - 如何知道线程执行是否终止?

c# - 表单认证

c# - 创建一个 asp :Button programmatically?

c# - 如果之前未选择任何行,则阻止 DataGridView 在排序时选择行

c# - 从 DataGridView 中的枚举创建下拉列表选项

c# - 如何在禁用时更改富文本框的背景颜色?

c# - 不支持使用 let 关键字的 Entity Framework Core 5?

c# - 如何将 C#.net 字典传递给 VBA

.net - Winforms ComboBox SelectedValueChange 事件

.net - MobileService Publish 不会更改 Mobileservice