10 列 [列 A、列 B など] を返すストアド プロシージャがあります。
そのテーブルに基づいて、それらの列をリストするwinform ListBox が作成されます。
ListBox 内の項目を選択してから、[送信] ボタンをクリックすると、DataGridView を含む新しいフォームが開きます。
新しいフォームの読み込みイベントに、列コレクションを反復処理して 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 データは不自然な例を使用しているため役に立ちません。