• ベストアンサー

DataGridの再表示について

C#にてアプリを作成しているのですが、DataGridを使用してDBからデータを引っ張ってきているのですが、条件を変えて再検索を行ったところ次のメッセージが出てきました。「このデータ グリッドのテーブル スタイル コレクションには既に同じマップ名のテーブル スタイルが含まれています。」この意味するところ、DataGridにかかわるどこかの部分を一度クリアさせなければならないと思っていますが、どこをクリアすればよいかわからないので、お尋ねいたしました。 よろしくお願いいたします。 また、ソースを載せようと思いましたが、ちょっと長いので、リクエストがあったら、載せようかとと思います。

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

  • ベストアンサー
  • ape5
  • ベストアンサー率57% (85/148)
回答No.1

DataGridのTableStylesのGridColumnStylesに設定されているMappingNameが重複しているのだと思います。 Clear()メソッドで削除してみてください。

ryota0117
質問者

お礼

ape5様 やはりClear()メソッドを使用するタイミングがちょっと違ったみたいで、もう一度やり直したらうまくいきました。 ありがとうございました。 これからもよろしくお願いいたします。

ryota0117
質問者

補足

ape5様 ちなみに再表示する際、同じDataGridのデータ設定メソッドを 使用するので、データ設定メソッドの前でClear()メソッドを 使用すればよろしいですか? Clear()メソッドを使うタイミングを教えてください。 よろしくお願いいたします。

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

関連するQ&A

  • VB2008・DataGridの表示について

    フォーム上にDataGridを設置してsqlcompactで作られたテーブルのデータを表示しようとして 以下のソースを実行すると、エラーになり表示できませんでした。 もし、原因がわかるかたがいらっしゃいましたら教えてくださると助かります。 表示するにあたり、テーブルの特定のカラムだけ表示して、ヘッダーを編集したい。 テーブルの全レコードではなくて対象レコードのみを表示 Dim cn As New System.Data.SqlServerCe.SqlCeConnection Dim SQL As System.Data.SqlServerCe.SqlCeCommand Dim db_sql As String ' テーブルスタイルを生成する Dim dgStyle As DataGridTableStyle = New DataGridTableStyle() dgStyle.MappingName = "表示用テーブル" ' 列スタイルを生成し、プロパティを設定する Dim col(4) As DataGridTextBoxColumn col(0) = New DataGridTextBoxColumn() col(0).HeaderText = "商品コード" col(0).MappingName = "商品コード" col(0).Width = 50 col(1) = New DataGridTextBoxColumn() col(1).HeaderText = "商品名" col(1).MappingName = "商品名" col(1).Width = 100 ' 列スタイルをテーブルスタイルに追加する dgStyle.GridColumnStyles.Add(col(0)) dgStyle.GridColumnStyles.Add(col(1)) ' テーブルスタイルをグリッドに追加する Me.DataGrid_Display.TableStyles.Clear() Me.DataGrid_Display.TableStyles.Add(dgStyle) 'DBのパスをセットしてオブジェクト化 cn.ConnectionString = "Data Source=" & DB_PATH & ";Password=" & DB_PASSWORD & ";Persist Security Info=True;" SQL = cn.CreateCommand 'データグリッドを表示する Dim dbadp As System.Data.SqlServerCe.SqlCeDataAdapter Dim dbtabl As DataTable Dim aa As DataSet db_sql = "SELECT syohinno, syohinryaku, suryo1, suryo2, suryo3 FROM porsj05_tempo ORDER BY date DESC" dbadp = New SqlCeDataAdapter(db_sql, cn) dbtabl = New DataTable dbtabl.Locale = System.Globalization.CultureInfo.InvariantCulture dbadp.Fill(dbtabl) Me.DataGrid_Display.DataSource = dbadp Me.DataGrid_Display.Refresh() エラー箇所 Me.DataGrid_Display.DataSource = dbadp エラー内容 Complex DataBinding は IList または IListSource のどちらかをデータソースとして受け入れます。 'System.ArgumentException' の初回例外が System.Windows.Forms.dll で発生しました。

  • MDBにデータを追加してそれをDATAGRIDに表示する時に・・・(涙)

    Windows2000 SP3 VisualBasic6.0 SP5 office2000 SP2 今どきDataGridを使用して、 (1)abc.mdb の中の 抽出元テーブルをクリア。 (2)抽出元テーブルに抽出条件でぬいた明細を追加。 (3)抽出元テーブルをグリッドに表示 とする時に(2)と(3)の間に 最低でも sleep 500 ぐらいを書かないとグリッドが真っ白で データが表示されません。 待たないで即テーブルの内容が表示される 方法はないでしょうか?困っています。

  • DataGridのReadOnlyについて

    こんにちは いつもお世話になっております。 VB.NET(2003)で、DataGridにデータを表示して、編集-更新する処理を行っています。 表示ボタンを押したら表示され、更新ボタンで更新される動作です。 表示方法はDataGridTextBoxColumnのReadOnly=TrueにしたものをDataTableにADDし、 これをDataGrid.DataSourceにセットして表示させています。 そして、クリアボタン押したときに dtb = New DataTable 'グリッドに表示 DataGrid.DataSource = dtb というようにDataTableを初期化してクリアしているのですが このときDataGrid上のTextBoxにカーソルがあると そのTextがクリアされず表示されたままになってしまいます。 ReadOnlyですが、一応カーソルは当たるようにしたいのです。 表示されたままになっているのは、クリアの方法がまずいのでしょうか? すみませんが、どなたか教えていただけませんでしょうか?

  • DataGridのバインドで苦しんでおります

    DataAdapterを使わずに仮想テーブルとバインドさせる事は可能なのでしょうか?(DBの接続が常時接続なので…) イメージなのですが、 (1)仮想テーブル作成 (2)DataGridと(1)をバインド 漠然とした質問で申し訳ありません。宜しくお願いいたします。

  • デザイン画面のDataGridに「NoNullAllowedException」が表示される

    VB.NET2002とAccess2000を使用しております。 oleDataAdapterのFillメソッドを実行し, データセットにテーブルデータを取得しています。 そのテーブルをDataGridに連結しているのですが, 以下のメッセージがフォーム[デザイン]画面の DataGridコントロールに表示されているのですが, 何が問題なのかご存知でしたら,教えて頂きたく思います。 「System.Data.NoNullAllowedException:'ReceiptNumber'にNullを使用することはできません。」 よろしくお願いします。

  • DataGridにデータセットのデータを入れたい

    VB.Netで困っております。ご教授いただけないでしょうか。 DataGridオブジェクトにデータセットのデータを表示する際,テーブル上の全データを表示するのではなく,ある条件で絞ったデータを表示するにはどうしたら良いのでしょうか? よろしくお願い致します。

  • DataGridに表示されない

    VB6でMySQL4.1に接続して MySQL内にあるデータベース"sample"の テーブル"総合"をDataGridに表示したいのですが できません。 エラーメッセージは "実行時エラー '7004': 行セットにはブックマークを設定できません" とでます。 どうしたら表示されるのでしょうか? Private Sub form_load() Dim cn As ADODB.Connection 'オブジェクト Dim rs As ADODB.Recordset 'データベースに接続 Set cn = New ADODB.Connection 'データベース:Sheet1 cn.ConnectionString = "Provider=MSDASQL.1;" _ & "Data Source=sample" cn.Open 'レコードセットの取得 Set rs = New ADODB.Recordset rs.ActiveConnection = cn rs.Source = "総合" rs.CursorType = adOpenStatic rs.LockType = adLockOptimistic rs.Open Set DataGrid1.DataSource = rs End Sub

  • DataGridでエラーになる

    こんにちわ。 現在「Microsoft Visual Basic 2008 Express Edition」と「Microsoft SQL Server 2005」で開発を始めた初心者です。 テーブルの指定範囲のレコードをDataGridに表示したいため、ホームページのサンプルを参考にコーディングしたのですが、 エラーとなってしまいます。 フォームには、ツールボックスから「DataGridView」をドラックして貼り付けてあります。 どうすれば動きますでしょうか?ご教授お願いします。 <エラーの内容> 「'TableStyles'は'System.Windows.Forms.DataGridView'のメンバではありません。」 <参考ホームページ> http://park5.wakwak.com/~weblab/selectRange.html ---------------------------------------------------------------- Imports TESTPG.DbUtil Imports System.Data.OleDb Public Class frm社員マスタ一覧 Inherits System.Windows.Forms.Form Private Sub BTN_検索ボタン_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_検索ボタン.Click '------------------------------------------- ' レコードを取得し、データグリッドに表示する '------------------------------------------- Try 'テーブルスタイルを生成する Dim ts As New DataGridTableStyle() 'マップ名を指定する ts.MappingName = "社員テーブル" '新しい列スタイルの作成 Dim cs(2) As DataGridTextBoxColumn cs(2) = New DataGridTextBoxColumn() 'マップ名を指定する cs(2).MappingName = "Column1" '列ヘッダに表示される文字列 '1列目:社員コード cs(0) = New DataGridTextBoxColumn() cs(0).HeaderText = "コード" cs(0).MappingName = "社員コード" cs(0).Width = 40 cs(0).Alignment = HorizontalAlignment.Center '2列目:社員氏名 cs(1) = New DataGridTextBoxColumn() cs(1).HeaderText = "社員氏名" cs(1).MappingName = "社員氏名" cs(1).Width = 90 cs(1).Alignment = HorizontalAlignment.Left '3列目:社員カナ名 cs(2) = New DataGridTextBoxColumn() cs(2).HeaderText = "社員カナ名" cs(2).MappingName = "社員カナ" cs(2).Width = 130 cs(2).Alignment = HorizontalAlignment.Left '列スタイルをテーブルスタイルに追加する ts.GridColumnStyles.AddRange(cs) 'テーブルスタイルをグリッドに追加する dgrSyain.TableStyles.Clear() ← ここでエラー dgrSyain.TableStyles.Add(ts) ← ここでエラー '************************************* 'SQL文の設定 'データを取得する 'データをバインドする '************************************* Catch oExcept As Exception '例外が発生した時の処理 MessageBox.Show(oExcept.ToString, "例外発生") End Try End Sub End Class

  • (ADO)DBのグリッド表示できない。

    同じような質問がありますが、わからなかったので再度質問させていただきます。 下記のホームページにありますように、AccessのDBをDataGridに表示したところ、フォームのDataGridには 何も表示しません。エラーも発生していない様子を見る とDBには接続していると思います。 http://homepage2.nifty.com/inform/vbdb/gridbyado.htm 下記が作成したもの ------------------------------------------------- Private Sub Form_Load() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset ' 接続する Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\test.mdb;" ' レコードセットを設定する Set rs = New ADODB.Recordset rs.Open "select * from test", cn, adOpenKeyset, adLockOptimistic ' グリッドのデータソースを指定する Set DataGrid1.DataSource = rs ' グリッドを更新する DataGrid1.Refresh End Sub ------------------------------------------------ フォームの設定やDBの設定またはほかの設定など必要なのでしょうか。 本のサンプルなどで調べましたが、わかりません。 わかる方いらっしゃいましたら教えていただけないでしょうか。 よろしくお願いいたします。 ----------- 環境 vb6 sp6

  • DataSourceにセットした値

    あるフォームにDataGrid1を作成しました。 DBの「管理テーブル」からデータをrecordesetに取得しました。 DBにはないデータもDataGrid1に表示させる必要があります。 DBから取得したファイル名のファイルを探して ファイルの更新日時を表示させたいです。 recordesetには値をセットできないようです。 どうやれば表示の値を変えることができますか?