C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: datagridviewのソートを解除したい


(過去ログ 126 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■75018 / inTopicNo.1)  datagridviewのソートを解除したい
  
□投稿者/ やんまー (1回)-(2015/02/19(Thu) 01:32:51)

分類:[VB.NET/VB2005 以降] 

畏れ入ります。

datagridviewの所謂「並べ替えグリフ」を解除したいのですが、うまく行かず困っています。
検索するといくつか出てくるのですが、そのどれもうまくいきませんでした。

どうすればよいかどうか、お助けください・・・


以下やってみたことです。


1) ソートを解除
dataGridView.SortedColumn.HeaderCell.SortGlyphDirection = Windows.Forms.SortOrder.None

→ 確かに、並べ替えグリフは消えますが、ソート状態は解除されないようでした。
  一度、並べ替えをした後、上記を実行しても
  AddData(以下のサンプルです)を実行するとソートされた結果で表示されてしまいました。


2)DataViewのソートを解除(http://dobon.net/vb/bbs/log3-40/24449.html)
 「DataGridView の DataSource に DataTable を指定した場合、表示にはその DataTable の DefaultView プロパティで取得できる DataView が使用されており、ソートはこの DataView の Sort プロパティを使って実現されています。
  この Sort プロパティは String 型で、Nothing や空文字列を設定することでソートがクリアされ元データの並びで取得されるようになります。」

 とのことで、
 data_table.DefaultView.Sort = ""
 とやってみたのですが・・・。やはりソート状態が解除できませんでした。

3)DataGridViewColumn.SortMode プロパティ
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridviewcolumn.sortmode(v=vs.80).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-4

説明そのものは良さそうなのですが、
使用例に「SortMode プロパティを使用して、複数列の並べ替えで指定した列による並べ替えを無効にする方法を次のコード例に示します。」
と書いてあるものの、全く例になっていないように見えます・・・。
サンプルはとても短いですし、そもそもSortMode プロパティ使ってないですし・・・。






'---------------------------------------------------
'setDefault で表を作成
'AddDataで行を追加します。
'---------------------------------------------------
	Dim data_set As DataSet	' データセット
	Dim data_table As DataTable

	Sub setDefault()
		' データセットの作成
		data_set = new DataSet("default_set")
		dataGridView.DataSource = data_set
		
		' データテーブルの作成
		data_table = New DataTable("default_table")
		
		' データテーブルをデータセットに登録
		data_set.Tables.Add(data_table)
		
		' データテーブルにカラムを作成・登録
		data_table.Columns.Add("col1", Type.GetType("System.Double"))
		data_table.Columns.Add("col2", Type.GetType("System.String"))
		
		Dim data_row As DataRow
		' データ行の作成とテーブルへの登録 その1
		data_row = data_table.NewRow()
		data_row("col1") = 1
		data_row("col2") = "test2"
		data_table.Rows.Add(data_row)
		
		' DataGridViewにデータセットを設定
		dataGridView3.DataMember = data_set.Tables(0).TableName
	End Sub
	
	
	Sub AddData()
		' データ行の作成とテーブルへの追加 その1
		Dim data_row As DataRow
		data_row = data_table.NewRow()
		
		Dim r As New System.Random()
		'0以上10未満の乱数を整数で返す
		Dim ir As Integer = r.Next(10)
		
		data_row("col1") = ir
		data_row("col2") = "test" & ir
		data_table.Rows.Add(data_row)
	End Sub

引用返信 編集キー/
■75020 / inTopicNo.2)  Re[1]: datagridviewのソートを解除したい
□投稿者/ Hongliang (282回)-(2015/02/19(Thu) 07:12:40)
2015/02/19(Thu) 07:14:20 編集(投稿者)

>  「DataGridView の DataSource に DataTable を指定した場合、表示にはその DataTable の DefaultView プロパティで取得できる DataView が使用されており、ソートはこの DataView の Sort プロパティを使って実現されています。
>   この Sort プロパティは String 型で、Nothing や空文字列を設定することでソートがクリアされ元データの並びで取得されるようになります」
>
>  とのことで、
>  data_table.DefaultView.Sort = ""
>  とやってみたのですが・・・。やはりソート状態が解除できませんでした。

これは「DataSourceにDataTableを指定した場合」であって、今回はDataSourceにはDataSetを指定していますからね。
直接DataTableをDataSourceにするわけにはいきませんか?

DataSourceがDataSetでDataMemberにテーブル名を指定する場合、
1) DataGrid::BindingContext(object, string)でBindingManagerBaseを取得
 (引数はそれぞれDataSetとテーブル名、つまりDataSourceとDataMemberです)
2) BindingManagerBaseをCurrencyManagerにキャスト
3) CurrencyManager::ListをDataViewにキャスト
とすることで該当のDataViewを取得できるようです。
引用返信 編集キー/
■75023 / inTopicNo.3)  Re[2]: datagridviewのソートを解除したい
□投稿者/ やんまー (2回)-(2015/02/19(Thu) 15:32:22)
Hongliang 様

> DataSourceがDataSetでDataMemberにテーブル名を指定する場合、
> 1) DataGrid::BindingContext(object, string)でBindingManagerBaseを取得
>  (引数はそれぞれDataSetとテーブル名、つまりDataSourceとDataMemberです)
> 2) BindingManagerBaseをCurrencyManagerにキャスト
> 3) CurrencyManager::ListをDataViewにキャスト
> とすることで該当のDataViewを取得できるようです。

出来ました!!

Dim a As BindingManagerBase = dataGridView.BindingContext( dataGridView.DataSource , dataGridView.DataMember )
Dim b As CurrencyManager = DirectCast( a , CurrencyManager )
Dim c As DataView = DirectCast( b.List , DataView )
c.Sort = ""

教えていただいたままですが、
とりあえず、これで解除されてホッとしました。

ありがとうございました!

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -