ソート状態の自動並び替えを避けるためのコードのトラブル
- 題名: ソート状態の自動並び替えを避けるためのコードのトラブル
- 著者: mori
- 日時: 2013/11/27 23:31:32
- ID: 31944
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: ソート状態の自動並び替えを避けるためのコードのトラブル
- 著者: Hongliang
- 日時: 2013/11/28 11:13:02
- ID: 31945
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: ソート状態の自動並び替えを避けるためのコードのトラブル
- 著者: 魔界の仮面弁士
- 日時: 2013/11/28 11:16:45
- ID: 31946
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: ソート状態の自動並び替えを避けるためのコードのトラブル
- 著者: mori
- 日時: 2013/11/28 18:09:47
- ID: 31949
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: ソート状態の自動並び替えを避けるためのコードのトラブル
- 著者: mori
- 日時: 2013/11/28 18:11:31
- ID: 31950
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: ソート状態の自動並び替えを避けるためのコードのトラブル
- 著者: mori
- 日時: 2013/11/29 10:23:19
- ID: 31952
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
【解決したい問題】
VS2013Expressを使用しています。
datagridviewにdatatableを表示しています。datasetは外部とは接続していません。
datagridviewで列をソートした状態でデータの編集をしたいのですが、自動並び替えをされてしまうので、入力直後に行が飛んでしまいます。
自動で並び替えをされないために、データ列をソートしたあと、別の列に連番を入れて、改めてその列をソートして、ソートしたばかりの状態を保とうとしているのですが、うまく行きません。
実際のプログラムでうまくいかないので別にテスト用に3列のみの表を作り、1列目がデータ、2列目がソート用、3列目には新規行作成時に連番を入れて、元の入力順に戻すためのソート用に作成しています。3列目のソートに関しては問題がないようです。
デバッグしてみると、連番を入れた列のソートがうまく行かず、例えば昇順の場合、5,1,4,3,2 など不明な並び方をします。その連番を入れた列ヘッダには昇順のアイコンが出ています。
妙なことに、その後すでにソート状態にないデータ列のデータを修正すると、突然正しい並び順になったりします。
具体的には以下の様なコードです。
Private Sub DataGridView1_ColumnHeaderMouseClick1(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick
If DataGridView1.RowCount = 0 Then
Exit Sub
End If
If e.ColumnIndex = 1 Then
Exit Sub
End If
If e.ColumnIndex = 2 Then
Exit Sub
End If
Dim CCol = DataGridView1.Columns(e.ColumnIndex)
Dim Sort1 = DataGridView1.Columns(1)
Dim Sort2 = DataGridView1.Columns(2) '///オリジナル順
Dim r As Integer = DataGridView1.RowCount
Dim ss = TextBox1.Text
Select Case ss
Case 0
'目的の列を並び替え
DataGridView1.Sort(CCol, System.ComponentModel.ListSortDirection.Ascending)
'並び替え後、「sort1」に連番記入
For i = 0 To r - 2
DataGridView1.Item(1, i).Value = i + 1
Next
DataGridView1.Sort(Sort1, System.ComponentModel.ListSortDirection.Ascending)
TextBox1.Text = 1
Case 1
DataGridView1.Sort(CCol, System.ComponentModel.ListSortDirection.Descending)
For i = 0 To r - 2
DataGridView1.Item(1, i).Value = i + 1
Next
DataGridView1.Sort(Sort1, System.ComponentModel.ListSortDirection.Descending)
TextBox1.Text = 2
Case 2
DataGridView1.Sort(Sort2, System.ComponentModel.ListSortDirection.Ascending)
TextBox1.Text = 0
End Select
End Sub
それぞれのCaseでSort1のソートをコメントアウトしてデバッグしてみると連番はきちんと入っています。Sort1をソートするところで変になります。
見当がつかなくて困っております。どうぞよろしくお願い致します。
あるいは、ソート状態で自動並び替えされない他の方法がありましたらお教えいただければ幸いです。