从DataTable更新DataGridView

时间:2016-12-19 19:21:49

标签: c# winforms datagridview datatable

我有一个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]));

            }

3 个答案:

答案 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

感谢大家的回复并帮助我找到解决方案:)