• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DataGridViewの表示と他のコントロールとの連帯)

DataGridViewと他のコントロールの連帯方法について

このQ&Aのポイント
  • DataGridViewを用いてMDBファイル内のテーブルを表示する方法について説明します。
  • フォームに配置されたTextBoxの値を変更した際に、DataGridViewにも反映させる方法について教えてください。
  • DataGridViewの選択レコードを変更した際に、TextBoxの値が変更されていればその値を反映させる方法について教えてください。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

テキストボックスはいくつあるのでしょう? カラム数分の4つなのでしょうか、それともフォーカスのあるセル1つなのでしょうか 4つあるのでしたら DataTableをフォームクラスの変数などにしておいて Textプロパティに対してバインディングするようにしてみてはいかがでしょう お示しのコードなら dtbTableがこれに該当します dtbTable.Dispose() を実行しないようにコメントアウトしておいて ' テーブルのカラム名などは修正してください TextBox1.DataBindings.Add("Text", dtbTable,"ID") TextBox2.DataBindings.Add("Text", dtbTable,"Date") TextBox3.DataBindings.Add("Text", dtbTable,"StartTime") TextBox4.DataBindings.Add("Text", dtbTable,"EndTime") といった具合で連結します 各テキストのEnterイベントでグリッドのカレントセルの更新を行います Private Sub TextBox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter, TextBox2.Enter, TextBox3.Enter, TextBox4.Enter   Dim arTx() As TextBox = {TextBox1, TextBox2, TextBox3, TextBox4}   Dim n As Integer = Array.IndexOf(arTx, ActiveControl)   If dtbTable.Rows.Count > 0 AndAlso n > -1 Then      DataGridView1.CurrentCell = DataGridView1.CurrentRow.Cells(n)   End If End Sub といった具合です 既存の行であればこれで対処可能です

growd
質問者

お礼

ご返答遅くなってしまい申し訳ありませんでした(汗; Bindingは聞いた事はあったのですが…便利ですね! 問題なく各列の取得が行えました! 余談ですが、 ---引用------------------------------------------ Private Sub TextBox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter, TextBox2.Enter, TextBox3.Enter, TextBox4.Enter   Dim arTx() As TextBox = {TextBox1, TextBox2, TextBox3, TextBox4}   Dim n As Integer = Array.IndexOf(arTx, ActiveControl)   If dtbTable.Rows.Count > 0 AndAlso n > -1 Then      DataGridView1.CurrentCell = DataGridView1.CurrentRow.Cells(n)   End If End Sub ------------------------------------------ここまで このようにしてVB6以前のコントロール配列のように使えてしまうのですね! また一つ勉強になりました(^^) redfox63様、ありがとうございました(^3^9!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • DataGridViewに画像を表示する方法

    言語:Microsoft Visual Studio 2008 データベース:SQL Server 2005 非接続型のデータアクセスです。 現在,上記環境で.netを勉強し始めたところです。 そこでDataGridViewに画像を表示するプログラムを作成したいのですが、うまくいきません。 色々調べたのですが思うようにいかないので,アドバイスをいただければと思います。 <テーブル> ID  画像 1  C\aaa.jpg 2  C\bbb.jpg 3  C\ccc.jpg <画像がない時に表示する画像> C\null.gif 自作したコードは下記の通りです。でもこれだと"null.gif"がセルに表示されるだけで、データ毎に 持っている画像を表示できません。コーディングがそうなので仕方がないのですが… レコード毎に画像を表示する方法を教えて下さい。 Private Sub frmDataGridViewTest_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load   Dim strsql As String   Call DBConnect() '---DB接続   strsql = "SELECT ID, 画像 FROM テーブル 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 = "テーブル"   '****************************** 'DataGridViewの列に画像を表示する   '******************************   Dim ImageColumn As New DataGridViewImageColumn()   ImageColumn.Name = "Image"   ImageColumn.ValuesAreIcons = False   ImageColumn.Image = New Bitmap("C\null.gif")   ImageColumn.ImageLayout = DataGridViewImageCellLayout.Zoom   ImageColumn.Description = "イメージ"   dgrview.Columns.Add(ImageColumn)   Call Disconnect() '---DB切断 End Sub

  • ADO.NETのDataSetのコピー

    ADO.NETでsdfファイルからmdbファイルへテーブル(TBL1)を移行させたいと思っています。 以下のようなコードでDataSetをコピーできないか試しましたが、移行できません。 sdf、mdbともテーブルのカラムの構造は同一です。 mdbの方にはレコードが空のテーブルが用意してあります。 何が間違っているのでしょうか?お教えいただけると助かります。 SDF Dim con As SqlCeConnection = DBUtility.GetConnection() con.Open() Dim strSQL As String strSQL = "select * from TBL1" Dim adapter As SqlCeDataAdapter = _ New SqlCeDataAdapter(New SqlCeCommand(strSQL, con)) con.Close() Dim ds1 As DataSet = New DataSet() adapter.Fill(ds1, "TBL1") Dim con2 As OleDbConnection = DBUtility.GetOLEConnection() con2.Open() 'MDB Dim strSQL2 As String strSQL2 = "select * from TBL1" Dim adapter2 As OleDbDataAdapter = _ New OleDbDataAdapter(New OleDbCommand(strSQL2, con2)) Dim ds2 As DataSet = New DataSet() ds2 = ds1.Copy Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(adapter2) adapter2.Update(ds2, "TBL1")

  • DataGridViewの再表示方法

    VB2005、SQLServer2005環境です。 FormA、FormBの2つのフォームがあり、FormAはDataGridViewでデータを表示し、 FormBはFormAで選択されたデータを呼び出し修正処理を行っています。 質問は、FormBでデータを登録し、FormBを閉じたタイミングで、 FormAのDataGridViewを再描画して最新のデータを表示したいのですが、うまくいきません。 <FormAで記述しているCD> Private Sub BTN_Data表示ボタン_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles BTN_Data表示ボタン.Click Dim strsql As String ' レコードを取得し、データグリッドに表示する '---DB接続 '---SQL文を作成して実行する strsql = "SELECT コード, 氏名 FROM TBLA ORDER BY コード 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, "TBLA") '---DataSet を DataGridView control と連結 dgrSyain.DataSource = ds dgrSyain.DataMember = "TBLA" '---DB切断 Call Disconnect() End Sub <FormBで記述しているCD> Private Sub BTN_更新_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_更新.Click '---FormBの内容を更新する処理----- Me.Close() End Sub 上記の、FormBが閉じる時のイベントで、ResetBindingsを使えばいいのかと思いましたが どこにどう記述すればよいかわかりませんでした。 どうすれば再描画できるでしょうか? ご教授ください。

  • DataGridView 複数選択で行番号の取得

    Visual Basic 2008 を使っています。 DataGridViewで複数の行を選択したとき、それぞれが何行目なのかを取得するにはどうしたらいいでしょうか? 具体的には、複数選択されている行の0列目の値をテキストボックスに表示するという動作を行いたいです。 自分で書いたコードをペーストしておきます。 Dim count As Integer = Me.DataGridView1.SelectedRows.Count For count = 0 To count - 1 Dim test As String test = Me.DataGridView1.Rows(?何行目か).Cells(0).Value Me.TextBox4.Text = test & "が選択されています。" & vbCrLf & zenkai Dim zenkai As String = Me.TextBox1.Text Next

  • DataGridViewで編集した内容をデータベースに反映したい

    言語:Microsoft Visual Studio 2008 データベース:SQL Server 2005 非接続型のデータアクセスです。 現在,上記環境で.netを勉強し始めたところです。 そこで簡単なプログラムからと思いDataGridViewを学習し始めたのですがすぐにつまずいてしまいました。 色々調べたのですが思うようにいかないので,アドバイスをいただければと思います。 やりたいことは (1)フォーム1のDataGridViewコントロールにデータソースをバインドしてデータを表示する。 (2)フォーム1の更新ボタン押下時に、DataGridViewで編集した内容をデータベースに反映する。 つまづいているのは(2)です。 http://japan.internet.com/developer/20070522/26.html を参考にしたのですが、どうコーディングすればよいかわかりません。 自作したコードは下記の通りです。 Private Sub frmDataGridViewTest_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load   Dim strsql As String   Call DBConnect() '---DB接続   strsql = "SELECT ID, 名称, 型式 FROM テーブル 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 = "テーブル"   Call Disconnect() '---DB切断 End Sub Private Sub BTN_更新_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_更新.Click   '---ここに何か必要なのでしょうか?????     このままだとdataadapterとdsに宣言がないとエラーになります。   '---DataGridViewコントロールでの変更をデータベースに戻す   Dim sqlCmdBuilder As New SqlCommandBuilder(dataadapter)   sqlCmdBuilder.GetUpdateCommand()   dataadapter.Update(ds.Tables("テーブル"))   Call Disconnect() '---DB切断 End Sub

  • 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)

  • 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に表示させたい

    はじめまして。最近VBをやりはじめ、行き詰まったのでお知恵を貸して下さい。 環境:VB2008,oracle11g dim view as string view = " select * from テーブル名" me.datagridview1.visible = true view と me行の間に、datagridview1に表示させるように定義したいのですが、 どうすれば表示される様になりますでしょうか?

  • DataGridViewで教えてください。

    DataGridViewで教えてください。 VB初心者ですが どうかよろしくお願いいたします。 VB2005で DataGirdView(dgv1)の始めの行を 他のDataGridView(dgv2)に追加したいのですが、 うまくいきません。 どうすればよいのでしょうか? すみませんが、 教えてください。 よろしくお願いします。 Dim Table As DataTable Dim MainTable As DataTable Dim row As DataRow Table = DirectCast(dgv1.DataSource, DataTable) MainTable = DirectCast(dgv2.DataSource, DataTable) row = MainTable.NewRow row = Table.Rows(0) MainTable.Rows.Add(row)

  • アクセスに登録した値を条件検索によりtextboxに反映させる方法を教えてください。

    はじめまして。お世話になります。 Accessで登録した値をVBのフォーム上のテキストボックスに 反映させる方法を教えてください。 [Accessのファイル名] db1.mdb [db1.mdbのテーブル名] ListName [ListNameの各項目] 日付、名前、住所、生年月日 [VBのフォーム] lbldate、text1.textbox、text2.textbox、text3.textbox、Select.command ※lbldateの内容は日付(テキスト型)でCaptionでとってきた値が「日付」項目に登録される。 3つのtextboxには入力した値は「名前」・「住所」・「生年月日」項目に登録される。(すべてテキスト型) [自分で調べ考えたコーディングの内容] Microsoft DAO 3.6 Object Library参照設定 Private Sub Select_Click() Dim strSQL As String Dim dbs As DAO.Database Dim myset As DAO.Recordset Dim ws As DAO.Workspace Set ws = DBEngine.Workspaces(0) Set dbs = ws.OpenDatabase("C:\db1.mdb") Me.AutoRedraw = True strSQL = "SELECT * FROM Listname where 日付 = '" & lbldate & "'; " Set myset = dbs.OpenRecordset(strSQL) Text1.Text = CStr(myset("名前")) Text2.Text = CStr(myset("生年月日")) Text3.Text = CStr(myset("住所")) myset.Close End Sub 上記の内容では上手くいきません。過去にテキストボックスに入力した値を教えていただきましたが今回は逆にレコードを検索して選択する方法が上手くいきません。 アドバイスをよろしくお願い致します。 ※求める機能としてlblnameに表示される値を条件にそれに対応するレコードを選択したいのですが検索時に該当する日付がなかった場合は3つのテキストボックスに値を何も返さないプログラムにしたいと思っています。よろしくお願い致します。