Datagridview不会在UI上显示数据,但代码中有数据(调试)

时间:2016-10-13 08:07:20

标签: c# datagridview

我需要将DGV从有界DGV复制到正常的DGV。

原因:我需要在从数据集加载后添加组合框列,并且在绑定的DGV上不可能。所以我试着复制新DGV中的内容。任何更好的想法??

我用它来复制dgv:copy Datagrids

然后我写了这个用按钮测试它:

private void button1_Click(object sender, EventArgs e)
    {
        dgvExcel2.AutoGenerateColumns = true;
        dgvExcel2 = CopyDataGridView(dgvExcel);
        dgvExcel2.Refresh();
        dgvExcel2.Show();
        dgvExcel2.Update();
    }

(更新,显示,刷新只是为了尝试某些东西,因为它不起作用)

当我在UI上运行程序时,dgvExcel2始终为空。 但是当我调试时,我发现数据中有内容。

1 个答案:

答案 0 :(得分:0)

如果我没记错,如果你想要ComboBox功能,你就不能将AutoGenerateColumns设置为true。这需要在DataGridView中预定义为DataGridViewComboBoxColumn。

最佳做法也不是将数据复制到DGV或从DGV复制数据,而是使用DataTablesList<T>在UI后面处理此数据。

请参阅以下答案:

DataGridView set column cell Combobox

Bind Data to the Windows Forms DataGridView Control

修改

在UI后面的数据表中处理数据,而不是直接在DGV之间复制行似乎可以解决您的问题。这将消除对复制DGV方法的需要,并使您的生活更轻松。

步骤将:

  1. 以DataTable格式(myData
  2. 获取数据
  3. 实例化BindingSource:

    BindingSource binding = new BindingSource();

  4. 将数据表分配给绑定源:

    binding.DataSource = myData;

  5. 然后将该绑定源分配给相关的DGV。

    myDataGridView.DataSource = binding;

  6. 然后,您可以重新分配绑定,或为新DGV创建新绑定,并为新绑定指定相同的数据表,而不是在DGV上复制行。

  7. 我希望这更清楚,我已正确理解了这个问题。