DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Datagridに表示したいフィールド名の取得方法

環境/言語:[環境: XP 使用言語:VB.NET ]
分類:[.NET]

はじめまして、Michi(未知)です。

VB,VB.NET共に、ビギナー中のビギナーです。
今、ADO.NETによるデータベースに挑戦中です。

うまく表現できないのですが、許してください。

「ユーザーが、DATAGRIDに表示するフィールドをDATATABLEから選択出来る様に
したい」と思っています。

ヒントを何方か戴けないでしょうか?
こんばんは、Michiさん。ピラルクです。

計算量やメモリの使い方において非常に荒っぽい(^^;
コードですが以下のようにとか。
TableStyleを使うともう少し穏やかに出来るかも。

'FormにCheckedListBox1とDataGrid1を各1個貼る

  Private m_dt_ORG As New DataTable()

  Private Sub Form1_Load( _
              ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'オリジナルの全カラム有りDataTableを作成
    Dim da As New OleDbDataAdapter("select * from T_TBL", _
                  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb;")
    da.Fill(m_dt_ORG)

    'カラムの選択リストを作成
    Dim col As DataColumn
    For Each col In m_dt_ORG.Columns
      CheckedListBox1.Items.Add(col.ColumnName, CheckState.Checked)
    Next

    '初回表示で呼び出し
    OnViewColumnChangeRequest(Nothing, Nothing)

    'Check/Uncheckイベントハンドラ設定
    AddHandler CheckedListBox1.ItemCheck, AddressOf OnViewColumnChangeRequest
  End Sub

  Private Sub OnViewColumnChangeRequest( _
              ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs)
    'オリジナルの全カラム有りDataTableをまるっぽCopy
    Dim dt_Choice As DataTable = m_dt_ORG.Copy()

    'リストをナメて、Check無しカラムをRemove
    Dim i As Integer
    Dim isChecked As Boolean
    For i = 0 To CheckedListBox1.Items.Count - 1
      If Not e Is Nothing AndAlso i = e.Index Then
        isChecked = (e.NewValue = CheckState.Checked)
      Else
        isChecked = CheckedListBox1.GetItemChecked(i)
      End If
      If Not isChecked Then
        dt_Choice.Columns.Remove(CStr(CheckedListBox1.Items(i)))
      End If
    Next

    'DataGridにデータ表示
    DataGrid1.DataSource = dt_Choice
    '(!)Scroll状態とかはResetされるがそれは諦めてもらう(--;
  End Sub
ピラルクさん、有難うございました。

また色々とお世話になると思いますが、よろしくお願い致します。

DOBON.NET | プログラミング道 | プログラミング掲示板