DataGridViewのコンボボックスの初期値について

このQ&Aのポイント
  • VB2005でDataGridViewでコンボボックスを作成しています。コンボボックスのDataSourceを指定した場合、初期値が表示されてしまいますが、再度選択しなおさないと有効になりません。
  • 一方、DataSourceを指定しないでItemsに値を設定した場合、初期値が表示されずに空白のままになります。
  • DataSourceを指定して初期値を表示させずに空白のままにする方法はあるのでしょうか?
回答を見る
  • ベストアンサー

DataGridViewのコンボボックスの初期値について

VB2005です。 DataGridViewでコンボボックスを作成してあります。 コンボボックスのDataSourceを指定した場合、 コンボボックスにカーソルが移ったときに、 1行目はDataSourceで指定したデータの1行目の値 (2行目以降は前の行で選択した値)が表示されが表示されてしまいます。 その値を利用したい場合、再度コンボボックスで選択しなおさないと 有効になりません。それならば、カーソルが移ったときも空白のままでは いられないのでしょうか? コンボボックスのDataSourceを指定しないで、 Itemsに値を設定したときには、カーソルが移ったときも値が 表示されないで空白のままです。このような設定にしたいのですが。 DataSourceをしてしたときには無理なのでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

お世話になります。 DataGridView の EditMode を EditOnEnter にしている場合は 確かにそのような動きになりますね。 これはこういう仕様なのだと思います。 なので回避するとしたら、バインドするデータソースの先頭に空白のデータを突っ込んでおくか、 DataGridView の EditMode を EditOnEnter でないものにするか、 どちらかしか方法がないと思います。

rabu_chihaha
質問者

お礼

回答ありがとうございます。 仕様ですか。 ではあきらめるしかないですね。

その他の回答 (1)

回答No.1

お世話になります。 Windows Vista および XP で動作確認したところ、 バインドしていてもカーソル移動が発生するような特に 1 行目が表示されませんでした。 右側の「V」をクリックした時の話でしょうか。 以下のようなコードでバインドした DataGridViewComboBox に 無理やり Form の Load イベントで DisplayIndex に -1 を入れてみましたが実行時に例外(System.ArgumentOutOfRangeException)が発生してしまいました。 Dim ccol As DataGridViewComboBoxColumn = DirectCast(Me.DataGridView1.Columns(0), DataGridViewComboBoxColumn) ccol.DisplayIndex = -1 MSDN をみてもそれらしいプロパティやメソッドが見つからなかったのでできないのかもしれません。 http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.datagridviewcomboboxcolumn_members(VS.80).aspx

rabu_chihaha
質問者

お礼

すみません。 補足入力が出来ないので、ここに記述させていただきます。 大事なことを書き忘れていました。 DatagridViewのEditModeを変更してあります。 EditMode=EditOnEnter やはりXPでやってもカーソルが位置づいたときには データが表示されてしまいます。 EditModeがdefaultのEditOnKeystrokeOrF2の場合には 表示されませんでした。 EditMode=EditOnEnterでは無理なのでしょうか?

rabu_chihaha
質問者

補足

ありがとうございます。試していただけたのですか? 私の環境はWindows2000なのですが、 右側の「V」をクリックしなくても カーソルが位置づいたときに発生してしまいます。 WindowsXPで試してみます。

関連するQ&A

  • DataGridViewのコンボボックスについて

    DataGridViewのコンボボックスにおける初期インデックス値設定について  会社の用度管理に関するソフトを個人で作成しています。DataGridViewのコンボボックス でかなり悩んでおり、どなたか解決できる方がおられましたらご教示願います。 DataGridViewにてコンボボックスを「列の編集」時点で 作成し(columnType:DataGridViewComboBoxColumn)プログラム 段階で選択項目の準備をしています・・・・ --選択項目の準備------------------------------------------------ ※DataGridView名:GMN物品発注明細表 ※column名:処理選択 Dim column As New DataGridViewComboBoxColumn() 'ComboBoxのリストに表示する項目を指定 column.Items.Add("発 注") column.Items.Add("未発中") column.Items.Add("発注済") '"処理選択"列にバインドされているデータを表示 column.DataPropertyName = "処理選択" '"処理選択k"列の代わりにComboBox列を表示する GMN物品発注明細表.Columns.Insert(GMN物品発注明細表.Columns("処理選択").Index, column) GMN物品発注明細表.Columns.Remove("処理選択") column.Name = "処理選択" ------------------------------------------------------------------ ここまではいいのですが、表にデータを一行づつ挿入する際に「選択項目の準備」 にて作成したリストを行ごとに"発 注"・"未発中"・"発注済"の何れかを選択して 表示していきたいのです。行の挿入には --行の挿入処理------------------------------------------------------- ’行の挿入 GMN物品発注明細表.Rows.Add(New Object() {?,"1","2",・・・・・}) -------------------------------------------------------------------  「?」に何を指定すれば"発 注"・"未発中"・"発注済"の何れかを表示できるようになるか? お教え願えないでしょうか? GMN物品発注明細表.Rows.Add(New Object() {?,"1","2",・・・・・})の下に 「GMN物品発注明細表.Item(0, iRowCount).Value = "未発中"」 とかを追加してやると、Value値は"未発中"になりますが、表示されていない状況です。さらに インデックス値が分かるといいのですが。 ↓赤丸に初めから"発 注"・"未発中"・"発注済"の何れかを表示したいのですが・・・ 開発環境 Windows7/Xp等      VisualStudio2010

  • [C#] DataGridViewでコンボボックスでの変更がdataTableに反映されません

    DataGridViewへのコンボボックス利用で躓いております。 DataGridViewのAutoGenerateColumnsをfalseにし、dataGridView.DataSourceにデータベースから読み込んだデータテーブルを指定しています。 次にdataGridViewにDataGridViewComboBoxColumnを追加し、DataPropertyNameにコンボボックスに対応させたい データテーブルのCaptionを指定することで、データテーブルとコンボボックスを関連付けています。 実行後の表示は想定通りなのですが、コンボボックスでアイテムを選択するとdataGridView上では値が更新されて、データテーブルには変更が反映されていません。 ちなみにコンボボックスでは、ValueMemberとDisplayMemberを設定し、DataGridView上ではstring、 内部的にはlongでデータ管理を行いたいと思っています。 どうにも解決方法が見いだせないので、こちらに質問させていただきました。 ソースを貼りつけるのでご指摘をお願いします。 利用しているデータベース |ID|ペットID| |1 |1| |2 |1| |3 |3| 以下ソースでは上記データベースのデータテーブルをpdtとしています。 コンボボックスのデータテーブル作成 DataTable comboTable = new DataTable(); comboTable.Columns.Add("ID", typeof(long)); comboTable.Columns.Add("NAME", typeof(string)); string[,] rowDataArray =      {{"1", "犬"},      {"2", "猫"},      {"3", "魚"}}; for(i=0;i<rowDataArray.GetLength(0);i++) {    DataRow row = comboTable.NewRow();    row["ID"] = rowDataArray[i, 0];    row["NAME"] = rowDataArray[i, 1];    comboTable.Rows.Add(row); } comboTable.AcceptChanges(); //コンボボックスを作成しコンボボックステーブルをバインド DataGridViewComboBoxColumn cbc = new DataGridViewComboBoxColumn(); cbc.DataSource = comboTable; cbc.DisplayMember = "NAME"; cbc.ValueMember = "ID"; cbc.DataPropertyName = pdt.ペットIDColumn.Caption; cbc.DisplayStyleForCurrentCellOnly = true; //dataGridViewにデータテーブルをバインド dataGridView1.AutoGenerateColumns = false; dataGridView1.DataSource = pdt; dataGridView1.Columns.Add(cbc); これを実行すると |犬| |犬| |魚| とdataGridViewに表示され、コンボボックスでは、犬、猫、魚が選べます。 一行目において、コンボボックスから猫を選択するとdataGridViewは下記のようになるのですが |猫| |犬| |魚| この後ブレークよりデータテーブルとdataGridViewを見ると pdt[0][0] = 1 dataGridView1.Rows[0].Cells[0].Value = 2 となっており、dataGridViewの値は更新されているのに、データテーブルでは更新されていませんでした。 今まで、dataGridView上でダブルクリックし、値を直接書き換えていたらデータテーブルの値も更新されていたのですが、 コンボボックスを使うようにしたら更新されなくなりました。 皆様、解決方法を教えていただけますでしょうか。

  • Datagridviewのコンボボックスにつきまして

    vb2005です。 DataGridViewコントロールのデータセットにデータベースのテーブルをセットしています。 そのDataGridViewの1列目にコンボボックスを設定し、 そのコンボボックスのデータセットにも別のテーブルをセットしたいのです。 Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As New DataSet Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\DB.mdb;") dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 商品", cn) dAdp.Fill(dSet, "t_商品") DataGridView1.DataSource = dSet.Tables("t_商品") dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 品種", cn) dAdp.Fill(dSet, "t_品種") Dim col As System.Windows.Forms.DataGridViewComboBoxColumn = DataGridView1.Columns(1) ・・・・★ col.DataSource = dtSet.Tables("t_品種") col.DisplayMember = "品種名" col.ValueMember = "品種コード" 上記のように記述しているのですが、★の部分で、下記のエラーになります。 型 'System.Windows.Forms.DataGridViewTextBoxColumn' のオブジェクトを型 'System.Windows.Forms.DataGridViewComboBoxColumn' にキャストできません データソースを指定したDataGridViewの列にはコンボボックス等の設定は 出来ないのでしょうか?

  • DataGridViewのコンボボックスについて

    開発環境:Visual Basic 2005 DataGridViewのDataGridViewTextBoxColumnの1行目をコンボボックスにして、 そのコンボボックスのドロップダウン幅を100に設定しようとしていますが、うまくいきません。 DataGridViewをフォームに貼り付け、以下のプログラムを実行すると、幅が120くらいになってしまいます。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load DataGridView1.Columns.Clear() DataGridView1.AllowUserToAddRows = False Dim TextColumn As New DataGridViewTextBoxColumn TextColumn.Name = "Name" TextColumn.Width = 100 Dim ComboColumn As New DataGridViewComboBoxColumn ComboColumn.Name = "Type" Dim List() As String = {"Type A", "Type B", "Type O"} ComboColumn.DataSource = List ComboColumn.DropDownWidth = 100 DataGridView1.Columns.Add(TextColumn) DataGridView1.Columns.Add(ComboColumn) For i As Integer = 1 To 5 DataGridView1.Rows.Add() Next Dim ComboCell As New DataGridViewComboBoxCell Dim NameList() As String = {"Name A", "Name B", "Name C"} ComboCell.DataSource = NameList ComboCell.DropDownWidth = 100 DataGridView1.Rows(0).Cells(0) = ComboCell End Sub どこが問題なのかどなたかご教授いただけると助かります。どうぞよろしくお願い致します。

  • コンボボックスの初期値(?)

    アクセス2000でデータベースを作成しています。 フォームでコンボボックスを置いています。フォームはなにも打たないと空白になっています。大体、いつも同じものを選択することになるのでそれを初期値としてセットしておきたいと思っています。コンボボックスのプロパティに「既定値」がありそれに入力しておく方法があります。 これではひとつ問題があります。リスト行が何行もある場合、一番上から選択しなければいけません。これをリスト行の真ん中あたりから上下選べるようにしたいのです。 このような場合、どのような方法でやればいいでしょうか?

  • VB2005 コンボボックスのリスト

    csvファイルをdatagridview1に読み込みました。 datagridview1の指定列のデータからコンボボックスに値を追加したいと考えました。 do loop でdatagridview1の行数分リスト追加しました。 コンボボックス.items.add(指定列の内容) 作成されたリストは A A A B B B C C ・・・・・ となりました。 これを A B C にしたいのですが・・・・ どういう方法がよろしいでしょうか?

  • コンボボックスについて

    Access2007です。TABキーで移動した先がコンボボックスに指定してあるフィールドの場合、カーソルが移動した時点で値集合ソースの内容が表示かつ、方向キーで選択出来るようにすることは出来ますか?

  • VB2008でコンボボックスのクリアについて

    VB2008でコンボボックスのクリアについて お世話になります。 コンボの設定を With ComboBox1 .Items.Clear() .Items.Add("a") .Items.Add("b") .SelectedIndex = 0 End With のようにしていた場合 ComboBox1.Items.Clear()を実行しても "a"の値がコンボに残るみたいなのですが、 指定の方法が悪いのでしょうか? .SelectedIndex = 0を指定しないと クリアされるみたいなのですが。 よろしくお願いいたします。

  • Excel VBAコンボボックスについて

    はじめまして、コンボボックスで選択したデータをセルに書き出すプログラムを作成しております。 コンボボックスプロパティのListFillRangeで範囲を指定していますが、途中空白のセルがあるため、空白セルまでコンボボックスに取り込まれてしまいます。 このListFillRangeの範囲を設定したまま、空白はコンボボックスに取り込まないようにする方法ってあるんでしょうか??お分かりになる方いらっしゃいましたら、お願い致します。

  • コンボボックスの初期表示について

    コンボボックスの初期表示についてですが、 試験できる環境がないため、以下の認識で正しいか教えてください。 コンボボックス1行目を表示 ComboBox1.SelectedIndex = 0 コンボボックス2行目を表示 ComboBox1.SelectedIndex = 1 空白を表示 ComboBox1.SelectedIndex = null or "" 文字を表示 ComboBox1.SelectedIndex = "表示"

専門家に質問してみよう