我有一个DataGridView
,其DataSource是DataTable
。我手动为DataGridView
创建列,而不是自动生成它们,因为我正在为某些列创建子标题。
我还有一个表单,用户可以在其中输入各种信息。该信息将被发送到执行计算的类,并将结果返回到DataTable
。
该行已成功添加到DataGridView
,但每个单元格都为空。然而,当我调试程序并查看DataTable
时,表中有明显的值。但是,当我按预期查看DataGridView
...时,只有空(null
)个单元格。
我已尝试dataGridView.Refresh()
和dataGridView.Update()
无济于事。如何才能将信息显示在DataGridView
?
这是构建DataGridView
:
//BUILD COLUMNS
mainDataGridView.Columns.Add("OType", "Type");
mainDataGridView.Columns.Add("OLoad", "Load Factor");
mainDataGridView.Columns.Add("WCMen", "Men");
mainDataGridView.Columns.Add("WCWomen", "Women");
mainDataGridView.Columns.Add("WCTotal", "Total");
mainDataGridView.Columns.Add("LavMen", "Men");
mainDataGridView.Columns.Add("LavWomen", "Women");
mainDataGridView.Columns.Add("LavTotal", "Total");
mainDataGridView.Columns.Add("App", "Appliances");
mainDataGridView.Columns.Add("Stations", "Stations");
mainDataGridView.Columns.Add("Other", "Other");
for (int i = 2; i < mainDataGridView.ColumnCount - 3; i++)
{
mainDataGridView.Columns[i].Width = 75;
}
mainDataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
mainDataGridView.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
mainDataGridView.Columns[8].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
mainDataGridView.Columns[9].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
mainDataGridView.Columns[10].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
mainDataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
mainDataGridView.ColumnHeadersHeight = mainDataGridView.ColumnHeadersHeight * 2;
mainDataGridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter;
mainDataGridView.RowHeadersVisible = false;
mainDataGridView.AutoGenerateColumns = false;
mainDataGridView.AllowUserToResizeColumns = false;
mainDataGridView.DataSource = dataGridTable; //<---DATASOURCE
mainDataGridView.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(75, 65, 65);
mainDataGridView.ColumnHeadersDefaultCellStyle.ForeColor = Color.FromArgb(220, 220, 220);
mainDataGridView.BackgroundColor = Color.FromArgb(100, 100, 100);
mainDataGridView.ColumnHeadersDefaultCellStyle.Font = new Font("Calibri", 9, FontStyle.Regular);
mainDataGridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter;
mainDataGridView.EnableHeadersVisualStyles = false;
mainDataGridView.AllowUserToAddRows = false;
mainDataGridView.CellPainting += new DataGridViewCellPaintingEventHandler(mainDataGridView_CellPainting);
mainDataGridView.Paint += new PaintEventHandler(mainDataGridView_Paint);
mainDataGridView.GridColor = Color.FromArgb(255, 80, 70);
以下是我将用户输入的信息发送到计算类的代码:
AddRowFrm addrowFrm = new AddRowFrm();
addrowFrm.ShowDialog();
if (addrowFrm.DialogResult == DialogResult.OK)
{
int[] newRowInfo = addrowFrm.NewRow;
dataGridTable.ImportRow(ItemDetails.Calculate(newRowInfo[0], newRowInfo[1], newRowInfo[2], newRowInfo[3], newRowInfo[4]));
}
答案 0 :(得分:0)
检查如何绑定到DataTable,以及DataTable包含与DataGridView相同的列(相同的列名,数据类型等)。
另外,您使用DataGridView的DataSource属性绑定到DataTable吗?
查看MSDN here以获取有关使用DataGridView的更多信息。
答案 1 :(得分:0)
我认为对于您的情况,在将信息添加到数据表时更好,在下一步中将datagridview绑定到它: 1 - 输入信息以形成 2 - 将信息添加为数据表中的新行 2将数据网格绑定到数据表。
答案 2 :(得分:0)
正如mjay所说,这只是一个正确绑定数据的问题。
我所要做的就是将DataPropertyName
设置为DataTable
的列名,如下所示:
mainDataGridView.Columns[0].DataPropertyName = "OType";
mainDataGridView.Columns[1].DataPropertyName = "OLoad";
//...etc
感谢大家的回复并帮助我找到解决方案:)