• 締切済み

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

みんなの回答

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

"発 注"・"未発中"・"発注済"の何れかでいいのでは? # どっかのサンプルコードそのままみたいだけど、そもそも # バインド列を入替える必要あるのかな?最初から DataGridViewComboBoxColumn # で作っておけば、Remove なんていらないのでは?提示のコードだけじゃ # 動かないし、質問としては不適当なサンプルコードだよ。

関連するQ&A

  • DataGridViewのカラムに自動で連番

    図のようにDataGridViewの2カラム目のコンボボックスに曜日をいれてあります。 DataGridViewは入力すると行が自動で増えていきますが コンボボックスを選択した段階でカラム1に1,2,3と連番をいれたいのですが 可能でしょうか 環境 windows XP 開発 Microsoft VisualBasic Express 2010 曜日の表示はサイトの例題をはりつけています。 Dim column As New DataGridViewComboBoxColumn() 'ComboBoxのリストに表示する項目を指定する column.Items.Add("日曜日") column.Items.Add("月曜日") column.Items.Add("火曜日") column.Items.Add("水曜日") column.Items.Add("木曜日") column.Items.Add("金曜日") column.Items.Add("土曜日") '"Week"列にバインドされているデータを表示する column.DataPropertyName = "Week" '"Week"列の代わりにComboBox列を表示する DataGridView1.Columns.Insert(DataGridView1.Columns("Week").Index, column) DataGridView1.Columns.Remove("Week") column.Name = "Week"

  • コンボボックスのマウスホイールを無効にしたい

    DataGridView内にコンボボックスを設定しております。 マウスのホイールボタンは、DataGridViewの縦スクロールに 使いたいのですが、DataGridView内のコンボボックスに カーソルがある場合、コンボボックス内のデータが変わってしまいます。 ユーザー側と打ち合わせた結果、コンボボックスにカーソルが ある時に、マウスのホイールボタンを無効に出来ないかと 言われております。 色々調べてみましたが、私では分からず、教えて下さい。 (サンプルソース) Dim column1 As New DataGridViewComboBoxColumn() With DataGridView1 .Columns.Clear() .Columns.Add("Col01", "列1") With column1 .Items.AddRange(New String() {"Item01", "Item02", "Item03"}) .Name = "Col02" .HeaderText = "列2" End With .Columns.Add(column1) For i As Integer = 0 To 100 .Rows.Add() Next i End With

  • DataGridViewの列にコンボボックスを表示する方法

    言語:VB2005 データベース:SQLServer 非接続型のデータアクセスです。 .net勉強中の初心者です。件名の件について悩んでいますのでご教授お願いします。 http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html 上記HPを参考に勉強しています。 DataGridViewComboBoxColumnを使用する方法ではうまく表示できましたが、 DataSourceプロパティを使用する方法ではうまくできません。 (1)の処理を行うとまず、ID 所属コード 所属名称 がDataGridViewにバインドされます。 そこに(2)の処理を行い 所属名称を コンボボックスに変更したいのですが、所属名称の後に 列名が空白のコンボボックスが新たに追加作成されてしまいます。 そして下記のエラーが発生します。 System.FormatException: DataGridViewComboBoxCell の値が有効ではありません この既定のダイアログを置き換えるには、DataError イベントをハンドルしてください。 いったい何がおかしいのか???です。よろしくお願いします。 '**************************************** '(1)DataGridViewにデータをバインドする '**************************************** strsql = "SELECT ID, 所属コード, t1.名称 as 所属名称 FROM ATBL LEFT OUTER JOIN BTBL ON ATBL.所属 = BTBL.コード ORDER BY ID" Dim comm As SqlCommand = New SqlCommand(strsql, Con) Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "テーブル") dgrview.DataSource = ds dgrview.DataMember = "テーブル" '---------------------------------------------------------------------- '(2)DataGridViewにComboBoxを設定する(DataSourceプロパティを使用した例) '---------------------------------------------------------------------- Dim DataSource As New DataTable("DataSource") DataSource.Columns.Add("Value", GetType(String)) DataSource.Columns.Add("code", GetType(Integer)) DataSource.Rows.Add("", 0) DataSource.Rows.Add("小学校", 1) DataSource.Rows.Add("中学校", 2) DataSource.Rows.Add("高校", 3) Dim column As New DataGridViewComboBoxColumn() column.DataPropertyName = "所属名称" column.DataSource = DataSource column.ValueMember = "code" column.DisplayMember = "Value" dgrview.Columns.Add(column)

  • VB2005 Datagridview の仮想モードでメモリリーク

    VB2005にてDatagridviewの仮想モードを実装しています。 DataGridviewを全件ループ処理する場合にメモリが増加します。完了してもそのままメモリが減りません。これを回避する方法がありますか?CellValueNeededはメモリを消費し続けるものなのでしょうか。 実際のプログラムでは件数が多い場合にメモリの消費が止まらずメモリ不足に陥ります。 以下は単純なコードにしたサンプルです。これでもデバッグモードで動かすと起動時20Mくらいのメモリ消費がループ処理時に100Mくらいにに増えます。 ※実際の処理でバインドしているデータ(datatable等)の方をループさせるという代替案がありますが、今回はdatagridviewから行った結果のメモリ不足についてご教授いただければと思います。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With Me.DataGridView1 .Columns.Add("Column1", "列1") .Columns.Add("Column2", "列2") .Columns.Add("Column3", "列4") .Columns.Add("Column4", "列4") .Columns.Add("Column5", "列5") .Columns.Add("Column6", "列6") .Columns.Add("Column7", "列7") .VirtualMode = True .RowCount = 100000 End With End Sub Private Sub DataGridView1_CellValueNeeded(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellValueEventArgs) _ Handles DataGridView1.CellValueNeeded e.Value = e.RowIndex.ToString & "," & e.ColumnIndex.ToString End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i As Integer = 0 To DataGridView1.Rows.Count - 1 DataGridView1.Rows(i).Cells(1).Value = DataGridView1.Rows(i).Cells(2).Value Next MsgBox("終了") End Sub

  • 【datagridview のDataSourceでdatagridv

    【datagridview のDataSourceでdatagridviewにデータを表示して、URLをハイパーリンクで表示する。】 いつもお世話にになります。 さて、DBにテーブルがあり、それにはひとつのカラムしかないと仮定します。そのカラムの内容はURL(例:http://www.okwave.jp)です。そのテーブルをDataSourceに設定してdatagridviewに表示する事はできました。しかし、このURLはハイパーリンクではないので、クリックしてもブラウザに自動的に表示されません。 どうにか、以下の方法で、セルの文字列ををハイパーリンクとして設定をする事ができましたが、どうやらこれの方法は新しくカラムを追加をしてしまうようです。(.addメソッドでカラムを追加してするようです。)自分が実現したいのでは、すでにあるカラムをハイパーリンクにしたいのです。 DataGridViewLinkColumn dgvlc1 = new DataGridViewLinkColumn(); dgvlc1.DataPropertyName = "link"; dgvlc1.HeaderText = "URL"; dgvlc1.Width = 400; dataGridView1.Columns.Add(dgvlc1); DataSourceを使ってdatagridviewにデータを表示した後、ハイパーリンクにする方法はあるのでしょうか? よろしくお願い致します。

  • vb.net datagridviewの列位置変更

    vb.net datagridviewの列位置を変更する方法を教えて下さい。 データグリッドビューにDataTable(DBから抽出したデータ)を割り当てました。 DataGridView1.DataSource = DataTable1 ここに、カラムを追加しました Dim column As New DataGridViewButtonColumn() '列の名前を設定 column.Name = "Button" '全てのボタンに"詳細閲覧"と表示する column.UseColumnTextForButtonValue = True column.Text = "詳細閲覧" 'DataGridViewに追加する DataGridView1.Columns.Add(column) この追加したカラムを一番左に表示したいです。

  • DataGridViewで行選択して、対応するDataTableの行を得るには?

    いつもお世話になっております。VB2005環境です。 DataGridViewの行を選択したときに、そのソースであるDataTableの同じ行のデータを参照するには、どうしたらいいでしょうか。DataTableのデータをまるごとDataGridViewに表示しているわけではないので、必要に応じて直接DataTableから取得したいです。とても初歩的な質問だと思うのですが・・・。 DataGridView1.DataSource = DataTable  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ Dim r As Integer = DataGridView1.CurrentCell.RowIndex Dim str As String str = DataTable.Rows(r)("項目名") MsgBox(str)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ このように行インデックスを取得してやってみたのですが、これだとDataGridView上でソートすると行番号が変わってしまい、DataTable側の対応する行のデータが得られません。 もう少し詳しく現状を書くと、まずCSVファイルからデータをロードして、DataTableに渡しています。そして、その内容をDataGridViewに表示しているのですが、表示する内容はデータテーブル通りの構造ではなく、表示する必要がある項目だけを選んで、1つずつカラムを追加してバインドいます。  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ’自動で列を追加しないようにする DataGridView1.AutoGenerateColumns = False ’データソースを指定する DataGridView1.DataSource = DataTable ’1つ1つ順番などを変えながら列を追加していく Dim column1 As New DataGridViewTextBoxColumn() DataGridView1.Columns.Add(column1) column1.Name = "Date" column1.HeaderText = "日付" column1.DataPropertyName = "F4" Dim column2 As New DataGridViewTextBoxColumn() DataGridView1.Columns.Add(column1) column1.Name = "Locatoin" column1.HeaderText = "場所" column2.DataPropertyName = "F1" ・ ・ ・  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ こんな感じでなので、表示されていない列のデータについては、必要に応じて直接DataTableから取得したいと思います。アドバイスよろしくお願いいたします<(_ _)>

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

  • DataGridViewがクラッシュする

    VB2005を使用しています。 DataGridViewコントロールで、以下のようなコードを実行した際に、 DataGridViewコントロール自体が大きな赤い×の表示になることがあります。 (必ず発生するわけではありません。) 'クリア DataGridView1.Columns.Clear() 'DataSetをDataGridViewに格納 DataGridView1.DataSource = dtData '空の列を追加する DataGridView1.Columns.Add("NOP", "") '最終列の幅をFillにする DataGridView1.Columns("NOP").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill '編集不可にする For i = 0 To DataGridView1.Columns.Count - 1 DataGridView1.Columns(i).ReadOnly = True Next i '行幅は変更できないようにする DataGridView1.AllowUserToResizeRows = False '行Headerを非表示にする DataGridView1.RowHeadersVisible = False 'セルの選択方法は行毎にする DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect '1行のみ選択にする DataGridView1.MultiSelect = False '追加行は表示しない DataGridView1.AllowUserToAddRows = False '列幅を自動リサイズさせる DataGridView1.AutoResizeColumns() 'DataGridViewのフォントサイズを変更する DataGridView1.Font = New Font(DataGridView1.Font.Name, 11) '行高さを自動リサイズさせる DataGridView1.AutoResizeRows() 'Headerのアライメントを中央にする DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 同時に、次のメッセージボックスが表示されます。 「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。 [続行]をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。 [終了]をクリックすると、アプリケーションは直ちに終了します。 オブジェクト参照がオブジェクトインスタンスに設定されていません。」 どうすればこのような現象を回避することができるのでしょうか? どうかご教授ください。

専門家に質問してみよう