1

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

根据该表,创建一个列出这些列的winform ListBox。

可以选择 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 中的列。我正在获取存储过程返回的整个 DataSet(它本身受参数限制)。

作为旁注,如果有人知道一本关于这类事情的详尽食谱,我很想知道它的标题是什么。来自 MSDN 的 API 数据是无用的,因为它使用了人为的示例。

4

1 回答 1

2

设置列后绑定到您的数据源。

首先为列设置 DataPropertyNameDataPropertyName = "REPORT_ID"

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

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

于 2013-02-20T15:14:40.163 回答