【发布时间】:2016-12-19 19:21:48
【问题描述】:
我有一个DataGridView,其数据源是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]));
}
【问题讨论】:
-
请发布您的代码?我擅长网格等,但需要知道你是如何绑定等的。
-
@Trey 我已经包含了构建
DataGridView的代码和将计算数据导入DataTable的代码。 -
Calculate 返回什么样的DataRow?此 DataRow 是否与您的表具有相同的列?还有为什么你使用 ImportRow 而不是使用 Add 方法将 Calculate 返回的 DataRow 添加到 DataTable.Rows 集合中?
-
@Steve
Calculate()返回DataRow。它的列数与DataTable和DataGridView完全相同。
标签: c# winforms datagridview datatable