添加列时,数据视图不显示所有列

本文关键字:显示 数据 添加 视图 | 更新日期: 2023-09-27 17:50:45

我有数据库FullName的datagridview列,然后我手动从代码位置1到5添加列,所以我添加了5列。我不能得到所有的行和列,当我试图在DataTable结束。

DataTable table = database.Execute("Select FirstName + ' ' + LastName as FullName from People");
                dataGridView1.DataSource = table;
                for (int i = 1; i <= 5 ; i++)
            {
                dataGridView1.Columns.Add(new DataGridViewColumn()
                {
                    HeaderText = i.ToString(),
                    CellTemplate = new DataGridViewTextBoxCell(),
                    Width = 30
                }
                );
            }
            DataTable dt = new DataTable();
            dt = dataGridView1.DataSource as DataTable;

添加列时,数据视图不显示所有列

好吧,这里的问题是,你手动添加列到你的DataGridView,它有一个单独的列的集合比你的DataSource。当您从dataGridView1.DataSource中获得DataTable时,您将从执行的原始查询中获得"FullName"列(因为DataTable中的列集合仍然只包含一列)。

要解决这个问题,将这行添加到for循环中:

(dataGridView1.DataSource as DataTable).Columns.Add(i.ToString());

另一个注意事项,你可以这样做:

DataTable dt = dataGridView1.DataSource as DataTable;

代替:

DataTable dt = new DataTable(); // Don't need to create empty DataTable here
dt = dataGridView1.DataSource as DataTable;

这将避免不必要的内存分配。

嗯…

如果Cory的解决方案不适合您尝试在

中添加列
BeginInvoke((Action)(() =>
{ 
  // for example 
    var Code = new DataGridViewTextBoxColumn()
                {
                    Width = 50,
                    DataPropertyName = "Code",
                    DefaultCellStyle = new DataGridViewCellStyle()
                    {
                        Alignment = DataGridViewContentAlignment.MiddleLeft,
                        ForeColor = Color.Black,
                    },
                    HeaderCell = new DataGridViewColumnHeaderCell()
                    {
                        Style = new DataGridViewCellStyle()
                        {
                            Alignment = DataGridViewContentAlignment.MiddleCenter,
                        }
                    }
                };
                Code.HeaderText = "Code";
                dgvWorkTypes.Columns.Add(Code); 
}));