【问题标题】:Updating DataGridView from DataTable从 DataTable 更新 DataGridView
【发布时间】: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。它的列数与DataTableDataGridView 完全相同。

标签: c# winforms datagridview datatable


【解决方案1】:

检查您如何绑定到 DataTable 以及 DataTable 是否包含与 DataGridView 相同的列(相同的列名、数据类型等)。

另外,您是否使用 DataGridView 的 DataSource 属性绑定到您的 DataTable?

查看 MSDN here 了解有关使用 DataGridView 的更多信息。

【讨论】:

  • 是的,DataTableDataGridView 具有完全相同的列名。我使用DataTable 作为DataGridView 的数据源将两者连接起来。
  • John,当您调试代码时,您的Calculate 方法是否获得了返回给dataGridTable 的正确数据行?如果是这样,那么它只是一个绑定问题。
  • mjay。是的,先生,我在DataTable 中得到了正确的数据。我相信我已经弄明白了;你是对的,它与正确绑定数据有关。我会在一分钟内发布解决方案。谢谢你的回复:)
【解决方案2】:

我认为对于您的情况,将信息添加到数据表时会更好,在下一步中将 datagridview 绑定到它: 1-输入信息以形成 2-将信息添加为数据表中的新行 2-将数据网格绑定到数据表。

【讨论】:

    【解决方案3】:

    正如 mjay 所说,这只是正确绑定数据的问题。

    我所要做的就是将DataPropertyName 设置为DataTable 的列名,如下所示:

            mainDataGridView.Columns[0].DataPropertyName = "OType";
            mainDataGridView.Columns[1].DataPropertyName = "OLoad";
            //...etc
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多