データグリッドでソートを行う場合


  2004-02-21 03:26:59  No: 111972

いつも参考にさせていただいていますが、
少し問題にぶつかったので、質問させていただきます。

ソートを行った後に、ソート対象となる列の
値を変更すると、ソートがかかっているために
行が移動してしまう。
上記内容で、移動しないようにするには、
どのようにすればよいのでしょうか。

新規に列を追加し、変更前の情報を格納し、追加列を
ソートした方が良いのでしょうか。

説明が、不十分かもしれませんが、よろしくお願いします。


特攻隊長まるるう  2004-02-25 20:32:49  No: 111973

データグリッドは使わないのでよく分からないんですが、
ソートってどこでするんですか?。
極端な話、SQL 文で ORDER BY して表示してたり…
Recordset の Sort プロパティとか…
データグリッドで設定できるんですか?


  2004-02-26 02:55:49  No: 111974

特攻隊長まるるうさんご返答ありがとうございます。

>ソートってどこでするんですか?。
 
 すいません「どこで」って、タイミングですか?
 タイミングだとすると、グリッド上にデータを表示
 させるとき以外にもソートは行います。
 DataViewのSortプロパティ等で・・・

あと、データグリッドのAllowSortingプロパティを
設定することによって、グリッドのヘッダー部分を
クリックするとソートが可能になります。

知識不足で、文章が抽象的すぎますが、お願いします。


特攻隊長まるるう  2004-02-27 23:56:08  No: 111975

>AllowSortingプロパティ
ごめん。うちの環境には無いのよ、そのプロパティ…って.NETかよっ!?
それで質問は…
ソートの方法は色々あるけど AllowSorting プロパティ を True に
した時のことに限定して質問してて AllowSorting プロパティ を False に
するのでは何か分からないけど都合が悪くて、その理由を想像して回答
して欲しいということ?。


  2004-02-28 02:07:14  No: 111976

特攻隊長まるるうさん返答ありがとうございます。

すいません。
環境を書くのを忘れていました。
OS  :XP
言語:VB.NET  2002
です。

>AllowSorting プロパティ を False にするのでは何か分からないけど
都合が悪くて
AllowSortingをFalseにすると確かSortが解除され初期表示に
戻ってしまったような・・・

Sortがかかったままグリッド上を編集したとい思ってりるのです。
Sortがかかっている列を編集すると、Sortがかかっているために
セルを移動したどっかに飛んでしまいます。
飛んでいくのをどうにか対処する方法は、ないでしょうか?


特攻隊長まるるう  2004-03-02 20:06:18  No: 111977

どうも継承すれば要らん機能が働かなくなるみたい(?)…それもどうかと思うんだけどw
これが正常に動くということは…なんかの設定変えれば良さそうなんだけど…いまいち
分からなかったので…詳しく調査して報告してくださぁい(>▽<)ノ(ぉ
[VB.NET2003]
    Public Class DataViewNeo
        Inherits DataView

        Sub New(ByVal DataTableX As DataTable)
            MyBase.New(DataTableX)
        End Sub

    End Class

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        DemonstrateDataView()
    End Sub

    Private Sub DemonstrateDataView()
        ' Create one DataTable with one column.
        Dim myTable As DataTable = New DataTable("myTable")
        Dim colItem As DataColumn = New DataColumn("item", Type.GetType("System.String"))
        myTable.Columns.Add(colItem)
        ' Add five items.
        Dim NewRow As DataRow
        Dim i As Integer
        For i = 0 To 4

            NewRow = myTable.NewRow()
            NewRow("item") = "Item " & i
            myTable.Rows.Add(NewRow)
        Next
        myTable.AcceptChanges()
        ' Create DataView objects.
        'Dim firstView As DataView = New DataView(myTable)
        Dim firstView As DataViewNeo = New DataViewNeo(myTable)

        ' Change the values in the table.
        myTable.Rows(0)("item") = "tiger"
        myTable.Rows(1)("item") = "fish"
        myTable.Rows(2)("item") = "cat"
        myTable.Rows(3)("item") = "dog"
        firstView.Sort = "item DESC"
        Me.DataGrid1.DataSource = firstView
    End Sub


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加