我有数据库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;
答案 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);
}));