添加列时,数据视图不显示所有列
本文关键字:显示 数据 添加 视图 | 更新日期: 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);
}));