VB.NET にて datagirdviewを使っており
それぞれのカラムをクリックした際にそれぞれの項目でソートすると思うのですが。
rows.add した際に一番下にいってしまいソートを維持できないです 何かいい方法はないでしょうか?
継続的にデータがはいってきて 2000行、3000行、時には1万を超えることもあるので いろんなサイトでソートを試してみたのですが
全部をみてソートするようでとても重かったので何かいい方法がないか相談してみたところです。
ひとつ確認。
データの追加は、以下のいずれで行っていますか?
(1) DataGridView に対して、直接 Rows.Add している。
(2) DataGridView にバインドした DataTable を Rows.Add している。
(3) 中継している BindingSource を通じて AddNew している。
1ですね 直接 Rows.Addしてます
こんな状態で質問してしまい申し訳ありません。
> 時には1万を超えることもあるので
そこまで行くと、DataGridView仮想モードが必要かも…。
(処理が複雑化するので、個人的にはお奨めできませんが)
> 1ですね 直接 Rows.Addしてます
であれば、(2)か(3)の手法に切り替えてみて下さい。
これならば、行を追加するとソートされた位置に表示されますので、
再ソートの手間もかかりません(サンプル後述)。
もちろん、既存のコードの手直しは必要になりますが…。
どうしても (1) の手法を使い続けるとなると、そもそも Rows.Add が
末尾行への追加を意味する物なので、そのままではどうしようもありません。
途中の行に挿入するために Rows.Insert を使うようにするか、もしくは、
.Rows.Add した後に .Sort 等で再ソートする必要が生じます。
> (サンプル後述)
DataGridView1 が、(1) の直接 Rows.Add。
DataGridView2 が、(2) のデータバインド法です。
Imports System.ComponentModel
Public Class Form1
Private tbl As DataTable
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
DataGridView1.ColumnCount = 4
DataGridView1.Rows.Add("1-1", "1-2", "1-3", "1-4")
DataGridView1.Rows.Add("2-1", "2-2", "2-3", "2-4")
DataGridView1.Rows.Add("8-1", "8-2", "8-3", "8-4")
DataGridView1.Rows.Add("3-1", "3-2", "3-3", "3-4")
DataGridView1.Sort(DataGridView1.Columns(0), ListSortDirection.Ascending)
tbl = New DataTable()
tbl.Columns.Add("Col1")
tbl.Columns.Add("Col2")
tbl.Columns.Add("Col3")
tbl.Columns.Add("Col4")
DataGridView2.AutoGenerateColumns = True
DataGridView2.DataSource = tbl
tbl.Rows.Add("1-1", "1-2", "1-3", "1-4")
tbl.Rows.Add("2-1", "2-2", "2-3", "2-4")
tbl.Rows.Add("8-1", "8-2", "8-3", "8-4")
tbl.Rows.Add("3-1", "3-2", "3-3", "3-4")
DataGridView2.Sort(DataGridView2.Columns(0), ListSortDirection.Ascending)
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
DataGridView1.Rows.Add("0-1", "0-2", "0-3", "0-4")
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
tbl.Rows.Add("0-1", "0-2", "0-3", "0-4")
End Sub
End Class
解答ありがとうございます。 2.3の手法は行ったことも無くまったく??状態です サンプルをあとで書いていただけるとの事で大変たすかります。 .sortも試したのですが 行数が多すぎるとFormが固まりあまり・・・でしたので質問させていただいたしだいです。
編集 削除DataGridView
を自作すれば。
オールカスタム。
VBは簡単だから、やれますよ。
以上。
ありがとうございます。結構いろいろ書いてあるので
大幅な変更がいりますが 一度ためしてみますw。