我有一个存储过程,它返回 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 数据是无用的,因为它使用了人为的示例。