• 締切済み

DatagridviewComboboxCellについて聞きたいですが

DatagridviewComboboxCellについて聞きたいですが、 各セルのコンボボックスに違い値を入れたいけど、以下のエラーが出ました。 "指定されたセルはグリッドにすでに属しています"。 ソース例: Dim Reader As FileReader = New FileReader("C://text.txt") Dim cbb as New DatagridviewComboboxCell() Dim cbb1 as New DatagridviewComboboxCell() Dim strA as String = "" Dim t as integer = 0 Me.Controls.Add(Dtgrdview) Dtgrdview.ColumnCount = 5 . (省略) For i as Integer = 0 to 10 Select case strA Case "A" cbb.Items.Add(Cstr(i)) Case "B" cbb1.Items.Add(Cstr(i+1)) End Select Next With Dtgrdview.Rows While not Reader.EndofData     Dim _readFile As readFile = New readFile(Reader.ReadFields()) '(readFile.vbは別) Dim row As String() = _ {_readFile.Class,_readFile.Name,_readFile.Year,_readFile.Add} ' Dtgrdview.Rows.Add(row) Select Case _readFile.ID Case "A" Dtgrdview.Rows(t).Cells(4) = cbb ==> t= 1 エラーが出る Case Else Dtgrdview.Rows(t).Cells(4) = cbb1 End Select t += 1 End While ReadFile.Close() End With 解決方法を教えてください。ありがとうございます。

みんなの回答

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.2

#1です。 参考: ■ DataGridViewの列にコンボボックスを表示する http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html 上記HP が手助けになると思います。  データの入れ替えを行うのであれば配列ではなく DATATABLE で操作を行う方法  上記HPの ■DataSourceプロパティを使用した例 が参考になります。 以上、参考まで

参考URL:
http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html
baocong79
質問者

補足

NOBNNさん。 上記の例はもう最初に参考になりましたが、 私はやりたい事とちょっと違いますね。 私がやりたいことは行ごとにコンボボックスに 違いアイテムに入れたいです。 例えば: 行1 コンボボックス : AAAA              BBBB 行2 コンボボックス : CCCC              DDDD 行3 コンボボックス : CCCC              DDDD でもありがとうございます。

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

質問するには 簡単かつ明瞭にお願いします。 あまりにも 部分的、かつ説明が足りません。 せめて コンパイルがとおるようにして実行できるような サンプルプログラムを提示してください。 意味がわかりません。 どのようなイベント時にどんな風にしたいのか 画面デザインの説明 フォームにどのようなコントロールが配置されているのかもわかりません。 データグリッドの項目数 および列の数、アクションはどのようにしたらどうなるのか やりたいことを具体的に書いてください。

関連するQ&A

  • マクロの改ページの追加について。

    下記コードに、E列を上から見て値が変わったら改ページ、を追加したいのですが、上手くできません。 A列、D列のみの下記コードでは成功します。 ちなみにE列は日付なんですが、A列D列同様にコードを書き足すだけではダメなんでしょうか?? 以前こちらで質問させて頂いて、回答を頂いたコードで、私自身完璧に内容を理解できていないので、追加の仕方もわからない状況です。 よろしくお願い致します。 Sub test() Dim rng As Range Dim objA As New Collection Dim objD As New Collection Dim strA As String Dim strD As String Dim blnBreak As Boolean ' 改ページを全て解除 Activesheet.ResetAllPageBreaks Activesheet.PageSetup.PrintArea ="$A:$K" For Each rng In Range("A:A") strA = CStr(rng.Value) strD = CStr(rng.Offset(0, 3).Value) ' コレクションに追加(同じデータはスキップする) On Error Resume Next objA.Add strA, strA objD.Add strD, strD On Error GoTo 0 If objA.Count = 2 Then ' A列の 2つ目のコレクションで改ページ blnBreak = True ' コレクションをリセット Set objA = New Collection Set objD = New Collection objA.Add strA, strA objD.Add strD, strD Else If objD.Count = 4 Then ' D列の 4つ目のコレクションで改ページ blnBreak = True ' コレクションをリセット Set objA = New Collection Set objD = New Collection objA.Add strA, strA objD.Add strD, strD Else blnBreak = False End If End If ' 改ページ挿入 If blnBreak Then Activesheet.HPageBreaks.Add rng End If Next End Sub

  • ArrayListに格納したクラス内のメンバの呼び出し方法(VB)

    お世話になります。VB2003でご質問があります。 通常Arryalistでは下記例1のように使用するのが一般的だと思うのですが、例2のようにArryaListにクラスを追加し、その中のメンバを呼び出すにはどのようにコーディングすればよいのでしょうか? コメントのコンパイルエラー箇所の部分です。 お手数ですが、ご教授よろしくお願いいたします。 ******************************************* (例1) Dim Test as new ArrayList Test.ADD("テスト") console.writeline(test(0)) ******************************************* ******************************************* (例2) Public Class A public strA as string public sub subTest() strA = "おはよう" end sub End Class Public Class B Dim a as new ArrayList a.Add(new A) a(0).subTest '--コンパイルエラー箇所 console.writeline(a(0).strA) '--コンパイルエラー箇所 End Class *******************************************

  • VB2005でExcelファイルを開く

    こんにちは。 VB2005の勉強をさせて頂いています。 ボタンを押すとコモンダイヤログを表示し、 ダイヤログ内で選択したExcelファイルの内容をフォームのDataGridViewにもって行きたいと思っていますが 上手くできません。一応現在のソースを下記に置いておきます。 特に、下記のソースの 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next のループ条件xlSheet.Rows.Count - 1がどうも6万くらいになっているようなのですが、 実際セルに入力したデータは5行程度のものです。 1セル1セル文字が入っているかどうかを調べていかないといけないのでしょうか? よろしければ、具体的なソースやアドバイスをお願いいたします。 -------------------------------------- Dim ofd As New OpenFileDialog() 'ofdの設定をする 'ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する If ofd.ShowDialog() = DialogResult.OK Then '選択されたファイルを読み取り専用で開く Dim ReadFile As System.IO.Stream ReadFile = ofd.OpenFile() If Not (ReadFile Is Nothing) Then Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks '既存ファイルを開く場合 Dim xlFilePath As String = ofd.FileName Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next 'xlSheet の解放 'xlSheets の解放 'xlBook を閉じる 'xlBook の解放 'xlBooks の解放 'Excelを閉じる 'xlApp を解放 End If End If ofd.Dispose()

  • 【vb2005】 動的に作成されたComboBoxをイベントハンドラへ関連づけする際の問題

    おはようございます。 VB5.0を1週間ほどかじって現在2005に乗り換えたばかりのド初心者です。 (用語の使い方などが間違っているかもしれません。おかしなところは指摘していただけるとありがたいです) 実行時に動的(?)に作成されたComboBoxをイベントハンドラへ関連付けようとしているのですが、ClickやLeaveなどで関連づけると正常に動作するのにTextChangedの場合になぜか認識してもらえません。 原因の見当がまったくつかず、困り果てています。 内容は、まずボタンを押すとコンボボックスが2つずつ追加されます。そのコンボボックスのリストを選ぶ際、追加されたふたつが同じものを選んでいると色が変わるようにするものです。 下にそのソースを簡潔にしたサンプルを記述させていただきます。 間違いの指摘や、うまくいかない原因、アドバイスなど頂ければ幸いです。 (formにはButton1というボタンが一つだけあります。) Dim Index As Integer Private CBox1() As ComboBox Private CBox2() As ComboBox Private Sub CBB_LT_SameErroCheck(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim T As Integer T = sender.Tag If CBox1(T).Text = "" Then Exit Sub End If If CBox1(T).Text = CBox2(T).Text Then CBox1(T).BackColor = Color.Red CBox2(T).BackColor = Color.Red Else CBox1(T).BackColor = Color.White CBox2(T).BackColor = Color.White End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ReDim Preserve CBox1(Index) ReDim Preserve CBox2(Index) SuspendLayout() CBox1(Index) = New ComboBox CBox2(Index) = New ComboBox With CBox1(Index) .Location = New Point(105, Index * 20) .Size = New Size(95, 20) .DropDownStyle = ComboBoxStyle.DropDownList .Tag = Index .Items.Add("List1") .Items.Add("List2") End With With CBox2(Index) .Location = New Point(200, Index * 20) .Size = New Size(95, 20) .DropDownStyle = ComboBoxStyle.DropDownList .Tag = Index .Items.Add("List1") .Items.Add("List2") End With 'AddHandler CBox1(Index).Click, AddressOf CBB_LT_SameErroCheck 'AddHandler CBox2(Index).Click, AddressOf CBB_LT_SameErroCheck AddHandler CBox1(Index).TextChanged, AddressOf CBB_LT_SameErroCheck AddHandler CBox2(Index).TextChanged, AddressOf CBB_LT_SameErroCheck Me.Controls.Add(CBox1(Index)) Me.Controls.Add(CBox2(Index)) ResumeLayout(False) Index += 1 End Sub

  • Npgsql+VB2008環境にてDataAdapterでのデータの追

    Npgsql+VB2008環境にてDataAdapterでのデータの追加できない この環境で、以下のプログラムを書いていますが、なぜか追加されません。問題はどこにあるのでしょうか。あとトランザクション処理も加えたいのですが。NpgsqlのVBサンプルがなくて・・・まして.NETをはじめたばかりで。初歩的なことですいません。 宜しくお願いします。 Dim strCnn As String strCnn = /* PostegreSQL接続文字列 */ Dim Cnn = New NpgsqlConnection(strCnn) Dim npgDataSet As DataSet = New DataSet Dim npgDataAdapter As Npgsql.NpgsqlDataAdapter npgDataAdapter = New Npgsql.NpgsqlDataAdapter("SELECT * FROM T_Zip;", Cnn) npgDataAdapter.Fill(npgDataSet, "T_Zip") Dim npgCommand = New NpgsqlCommand("INSERT INTO T_Zip(ZipCode, Address) VALUES (:Code,:Adr);", Cnn) npgCommand.Parameters.Add("Code", SqlDbType.NVarChar, 10, "ZipCode") npgCommand.Parameters.Add("Adr", SqlDbType.NVarChar, 50, "Address") npgDataAdapter.InsertCommand = npgCommand Dim dt As New DataTable npgDataAdapter.Fill(dt) Dim tempRow = dt.NewRow() tempRow.BeginEdit() tempRow("ZipCode") = "487-0023" tempRow("Address") = "AAAA" tempRow.EndEdit() dt.Rows.Add(tempRow) npgDataAdapter.Update(npgDataSet, "T_Zip")

  • Gridに日付を入れるとき

    Gridに「2006/05/10 13:00:00」と表示させたいのですが、「2006/05/10」と表示されてしまいます。 ------------------------------------------------ Dim dt As DataTable Dim dtSet As New DataSet dt = dtSet.Tables.Add("aaa") dt.Columns.Add("日付", Type.GetType("System.DateTime")) dt.Rows.Add(New Object() {"2006/05/10 14:00:00"}) DataGrid1.DataSource = dt ------------------------------------------------ ソースが間違っているのでしょうか。どなたかアドバイスをお願いします。

  • VB.NETでのデータベース書き込みについて

    リストレビューに表示されているデータをデータベースに書き込む処理を追加したいのですが、データセットにメモリ上のテーブルを作成してデータベースへ書き込む方が良いのでしょうか? それとも直接データベースに書き込む方が良いのでしょうか? 前者のテーブル作成のコードは書きの通りです。 Public Function AddDataSetTable(ByVal kojo_cd() As String, ByVal kojo_name() As String, ByVal kojo_date() As String)   Dim dtSet As New DataSet("DataSetTable")   Dim dtTable As New DataTable("CalDatTable")   Dim fmain As New FrmMain   Dim i As Integer   'テーブルに列を追加    With dtTable.Columns     .Add("コード")     .Add("名称")     .Add("日にち")    End With   'テーブルに行を追加   With dtTable.Rows    For i = 0 To UBound(kojo_cd)     .Add(New Object() {kojo_cd(i), kojo_name(i), kojo_date(i)})    Next i   End With   'データセットにテーブルを追加   dtSet.Tables.Add(dtTable) End Function

  • 記述

    下記コードでRows("gyou:gyou").Select が正しくありません。Rows("4:4").Select の意味にさせるにはどう記述すればよいか。お教え願います。 Sub Macro1() ' Dim gyou As Integer gyou = 4 ' Rows("4:4").Select Rows("gyou:gyou").Select Selection.Insert Shift:=xlDown End Sub

  • EXCEL2000で作成したマクロが2007で動作しない

    EXCEL2000で作成したマクロがEXCEL2007上で動作しません。 2つのシートに入ったデータを,「抽出」シートにコピー後, 抽出条件に合わせて抽出するというものなのですが, 「Sheet1」で最終行を取得するところで,正しい範囲を 選択しません。どこが間違えているのか,ご指南頂けないでしょうか? お願いいたします。 下には,正しい結果が出ない所までを貼りつけました。 Sub フィルタオプション() Dim LastRow As Long, LastColumn As Long Dim myData As Range Dim myCriteria As Range Sheets("Sheet1").Select Rows("1:1").Select Selection.Copy Sheets("抽出").Select Rows("3:3").Select ActiveSheet.Paste If Worksheets("Sheet1").FilterMode = True Then   Worksheets("Sheet1").ShowAllData End If With Worksheets("Sheet1") LastRow = .Cells(Application.Rows.Count, "A").End(xlUp).Row End With Sheets("Sheet1").Select Range(Rows(2), Rows(LastRow)).Select Selection.Copy Range("A1").Select Sheets("抽出").Select Range(Rows(4), Rows(4)).Select Selection.Insert Shift:=xlDown

  • VBAで、OutlookEXのメール作成

    OSは、XPpro Excelは2003を使用しています。 VBAで、EXCELの表からOutlookExpressのメール作成をしたく、 色々なサイトを見ながら 下記までは何とか書いたのですが、 宛先(=add)のところが、どうしても表のe-mailアドレスの値を代入できません。 どう直せば良いのか教えて頂けないでしょうか。 よろしくお願い致します。 Sub outlookexpress用メール作成() Dim Subj As String Dim BodyText As String Dim t As String Dim cellGyo As Integer Dim add As String For cellGyo = 2 To 100 Cells(cellGyo, 6).Select add = Selection.Value If add = "" Then Exit For End If Subj = "展示会のご案内" BodyText = Cells(2, "G") t = "C:\Program Files\Outlook Express\msimn.exe /mailurl:mailto: add ?bcc=""&subject=" & Subj & "&body=" & BodyText & "%20" MsgBox t Shell t Next cellGyo End Sub ********** (私はOutlookを使用していますが、 同僚がOutlookExpressを使用しています為、 OutlookExpress用のVBAを作成したく奮闘しています。)

専門家に質問してみよう