- 題名: コンボボックスを表示したデータグリッドビューの列に値が表示されない。
- 日時: 2013/08/27 23:58:49
- ID: 31780
- この記事の返信元:
- (なし)
- この記事への返信:
- [31781] Re[1]: コンボボックスを表示したデータグリッドビューの列に値が表示されない。2013/08/28 8:08:53
- ツリーを表示
おはようございます。 DataTableと連携する場合はDataGridViewはまぁデータと無関係な覗き窓のようなものなので 単にそこから列を消してもデータ側に何の影響もありませんが、 データ連携せずに使う場合は列定義が列の情報と直接関係するので、 DataGridView1.Columns.Remove("Week")として列を消してしまえばその列用にセットされているデータは当然消えます。 今のコードのままでどうしてもすりかえたいという場合は、 列を追加した後、元の列をRemoveする前にデータを新しい列の方へコピーする必要があります。 DataGridView1.Columns.Insert(DataGridView1.Columns("Week").Index, column) For Each r As DataGridViewRow In DataGridView1.Rows r.Cells(column.Index).Value = r.Cells(DataGridView1.Columns("Week").Index).Value Next DataGridView1.Columns.Remove("Week") ※なお、よそと連携していない場合には column.DataPropertyName = "Week" はそもそも無意味です。 (すり替えを行っていない他の2列には、このプロパティには何も入っていないと思います。) ところで、 現在 DataGridView1.Columns.Add("Week", "Week") としている部分ですが… SetDataで一旦目的と違う形の列を作っておいて後からコンボボックスタイプにすりかえようとしている目的は何でしょうか? DataGridView1.Columns.Addのもうひとつのオーバーロードを使えば定義した列情報を渡せるので、 最初から Dim column As New DataGridViewComboBoxColumn() column.Name = "Week" column.Items.Add("日曜日") column.Items.Add("月曜日") column.Items.Add("火曜日") column.Items.Add("水曜日") column.Items.Add("木曜日") column.Items.Add("金曜日") column.Items.Add("土曜日") DataGridView1.Columns.Add(column) としてコンボボックスタイプのものを作れます。 ついでに… 「掲示板アップ用の仮プログラムだから」だと思いたいですが、 コマンドライン引数が1の際にはデータの方だけ列を作ってDataGridViewには列を作っていない点が気になります。 列の定義がない状態で連携するオブジェクトを渡した際にDataGridViewが自動的に面倒見て列定義を作ってくれているだけですので、 まともに日常使用するプログラムを作る場合には「作らないでよいもの」とは考えない方がよいでしょう。 本来はどちらの場合でもちゃんとスタイル等を整える意味でDataGridView側の列の定義が必要と考えた方がよいと思います。 (緊急で作る何かのチェック用プログラムの場合はともかく。)
とん。さん、早速の回答有難うございます。 >列を消してしまえばその列用にセットされているデータは当然消えます。 あまりに当然過ぎるご指摘、お恥ずかしい限りです。DataTable経由で 値を設定する場合に、セル値の転送が不要なためにウッカリしていまし た。取り合えずテスト用ソースへ反映して動作を確認しました。 >SetDataで一旦目的と違う形の列を作っておいて後からコンボボック >スタイプにすりかえようとしている目的は何でしょうか? 特に考えがあってそうしてる訳でなく、「掲示板アップ用の仮プログラ ムだから」と言う理由から、参考にした【DataGridViewの列にコンボボ ックスを表示する】に出来る限り手を入れたくなかっただけです。 >コマンドライン引数が1の際にはデータの方だけ列を作ってDataGridView >には列を作っていない点が気になります。 これも上記と同様です。
分類:[.NET]