datagridview在添加列时不显示所有列

时间:2015-05-26 14:05:18

标签: c# .net wpf winforms

我有数据库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;

2 个答案:

答案 0 :(得分:1)

好吧,这里的问题是您是手动向DataGridView添加列,其列的 单独的 列比DataSource更多}。当您从DataTable获得dataGridView1.DataSource时,您将获得&#34; FullName&#34;您执行的原始查询中的列(因为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;

这将使您免于不必要地分配内存。

答案 1 :(得分:0)

嗯...

如果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); 

}));