DataGridView を Sort して DataTable に代入していますが、DataTableが反映されていない。
-
2009年9月9日 9:02VB2008 を使用しています。
DataGridView を Sort して DataTable に代入し、そのDataTableを読んで処理しています。
DataGridView は Sort後に
DataTable = DataGridView1.DataSource
をしているのに、DataTable を最初から読んでいくと、最初のDataGridViewに表示された順になっていて、
Sort後の順になっていません。
何故だか解らず、お解りの方、返答宜しくお願い致します。
すべての返信
-
2009年9月9日 9:35
DataGridViewは勝手にはDataTableをソートしてくれません。
DataGridViewのDataSourceにDataViewを入れて、そのDataView経由で取り出せばソート順になります。
Public Class Form1 Inherits Form Public Sub New() Dim btn As New Button() btn.Text = "読み出しテスト" AddHandler btn.Click, AddressOf ButtonClick Me.Controls.Add(btn) Dim dt As New DataTable() Dim col1 As DataColumn = New DataColumn("", GetType(Integer)) _ With {.Unique = True, .AutoIncrement = True, .AutoIncrementSeed = 0, .AutoIncrementStep = 1, .ReadOnly = False} dt.Columns.Add(col1) dt.Columns.Add() dt.Rows.Add(Nothing, "A") dt.Rows.Add(Nothing, "D") dt.Rows.Add(Nothing, "C") dt.Rows.Add(Nothing, "E") dt.Rows.Add(Nothing, "B") dt.Rows.Add(Nothing, "F") dgv.DataSource = New DataView(dt) dgv.Top = btn.Height dgv.Height = Me.ClientSize.Height - btn.Height dgv.Width = Me.ClientSize.Width dgv.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.Right Or AnchorStyles.Top Me.Controls.Add(dgv) End Sub Dim dgv As New DataGridView() Private Sub ButtonClick(ByVal sender As Object, ByVal e As EventArgs) Dim view As DataView = CType(dgv.DataSource, DataView) For Each row As DataRowView In view System.Diagnostics.Debug.WriteLine(row.Item(0).ToString + "," + row.Item(1).ToString()) Next System.Diagnostics.Debug.WriteLine("") End Sub End Class- 回答としてマーク 菊地俊介 2009年9月24日 9:43
-
2009年9月9日 15:01モデレータ
何故だか解らず、お解りの方、返答宜しくお願い致します。
DataGridViewのDataSourceにデータテーブルを設定すると、DataGridViewに表示されるのは実際にはそのデータテーブルのデータビューになります。DataGridViewにデータテーブルが直接表示されることはなく、常にそのデータビューが表示されます。DataGridViewはそのデータビューを操作することによって、DataGridViewにおけるソートを実現しています。つまり、データテーブルの並び順を変更しているわけではありません。
さて、DataSourceにデータビューが指定されず、直接データテーブルが指定された場合、そのデータビューは何になるのでしょうか? それはデータテーブルのDefaultViewプロパティで得られるデータビューになります。したがって、
CType(DataGridView1.DataSource, DataTable).DefaultView
で得られるデータビューが、DataGridViewでソートされた並び順になっています。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク 菊地俊介 2009年9月24日 9:43
-
2009年9月24日 9:46皆様、こんにちは。
gekkaさん、trapemiyaさん、いつも詳しい回答ありがとうございます。
fuji-tochigiさん、フォーラムのご利用ありがとうございます。
その後いかがでしょうか?疑問は解決しましたか?
有用な情報と思われたため、勝手ながらgekkaさん、trapemiyaさんの回答へ回答マークをつけさせていただきました。
今後ともフォーラムをよろしくお願いします。
それでは!

