Datagridview不显示用户界面上的数据,但有数据在代码(调试)

本文关键字:数据 代码 调试 显示 用户界面 Datagridview | 更新日期: 2023-09-27 18:12:55

我需要将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总是空的。但是当我调试时,我看到数据中有内容。

Datagridview不显示用户界面上的数据,但有数据在代码(调试)

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

最佳实践也不是在dgv之间复制数据,而是在UI后面用DataTablesList<T>处理这个问题。

请参考以下答案:

DataGridView设置列单元格Combobox

将数据绑定到Windows Forms DataGridView控件

编辑:

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

步骤如下:

  1. 获取DataTable格式的数据(myData)
  2. 实例化一个BindingSource:

    BindingSource binding = new BindingSource();

  3. Assign datatable to binding source:

    binding.DataSource = myData;

  4. 然后将绑定源分配给相关的dgv。

    myDataGridView.DataSource = binding;

  5. 然后,你可以重新分配你的绑定,或者为新的DGV创建新的绑定,并将相同的数据表分配给新的绑定,而不是在你的DGV中复制行。

我希望这是更清楚的,我已经正确理解了这个问题。