为什么winform DataGridView控件在添加自定义列后不显示数据

本文关键字:显示 数据 自定义 添加 winform DataGridView 控件 为什么 | 更新日期: 2023-09-27 18:00:13

我有一个存储过程,它返回10列[列a、列B等]。

基于该表,将创建一个winformListBox,列出这些列。

可以选择ListBox中的项目,然后单击"提交"按钮,打开一个带有DataGridView的新表单。

在新的Forms加载事件中,我放置了遍历列集合并创建DataGridView结构的代码。

我选择的列会显示出来,但数据不会填充到返回的行中。

   StoredProcedures.up_Report_Adapter reportAdapter = new StoredProcedures.up_Report_Adapter();

        gridCustomData.AutoGenerateColumns = false;
        gridCustomData.DataSource = reportAdapter.GetData();
        gridCustomData.Columns.Clear();
        gridCustomData.Columns.Add(new DataGridViewColumn() { HeaderText = "REPORT_ID", CellTemplate = new DataGridViewTextBoxCell() });
    foreach (var item in customReport.lstBoxSelectFields.SelectedItems)
            {
                gridCustomData.Columns.Add(item.ToString(), item.ToString());
            }
        gridCustomData.Refresh();

数据显示的行数正确,如果我在gridCustomData中插入一个断点。Refresh(),我可以看到从ListBox中选择的列的完整数据。

那么,如何使数据实际显示在每个定义的行/列中呢?

我已经尝试将创建列的顺序更改为在使用相同结果更新gridCustomData DataSource之前和之后。

我还尝试创建一个BindingSource并将其用作DataGridView的DataSource,然后使BindingSource的DataSource成为已填充的表适配器。数据仍然不可见。

目标是创建一个"自定义查询",但实际上,这只意味着选择数据集中的列。我正在获取存储过程返回的整个DataSet(它本身受参数限制)。

顺便说一句,如果有人知道这类东西的详尽食谱,我很想知道它的标题是什么。MSDN的API数据没有用,因为它使用了人为的例子。

为什么winform DataGridView控件在添加自定义列后不显示数据

设置列后绑定到数据源。

首先设置列DataPropertyName = "REPORT_ID" 的DataPropertyName

gridCustomData.Columns.Add(new DataGridViewColumn() { HeaderText = "REPORT_ID", CellTemplate = new DataGridViewTextBoxCell(), DataPropertyName = "REPORT_ID" });

然后绑定到数据源。gridCustomData.DataSource = reportAdapter.GetData();