- - PR -
DataGridで並替えを行い、行を挿入して表示
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-06-30 13:59
こんにちは。はじめての投稿です。宜しくお願いします。
VB.netでプログラムのWebアプリケーションの開発を行なっています。 今行なっていることがDataGridにデータを表示するだけなのですが、 その過程でDataViewのデータを並び替えて、行の挿入を行なってからBindしています。 実際には -------------------------------------------------------------- ・・・ @ DataView1.sort = "name" A For Each myRow In Dataview1.Table.Rows '挿入する行の位置を検索 ・・・ ・・・ ・・・ ReDim Preserve cntRow(i) cntRow(i) = cnt NEXT B Dim a as Integer For Each a In cntRow '行を挿入 myRow = DataView1.Table.NewRow myRow("name") = "dummy" ・・・ ・・・ DataView.Table.Rows.InsertAt(myRow, a) Next C DataGrid1.DataSource = DataView1.Table DataGrid1.DataBind() -------------------------------------------------------------- こんな感じで行なっています。 上に記載した手順で実行しますとDataViewのデータをソートしてから 行を挿入しBindしてるわけですから、挿入した行に対してはソートが行なわれないと 思うのですが、実際に行なってみると、ソートが実行されるタイミングがBindする 直前(?)で挿入した行も一緒にソートされてしまいます。 挿入した行がソートされないような方法を探しています。 お手数ですがよろしくお願いします。 |
|
投稿日時: 2003-06-30 22:43
こんばんわ。
「データをソートしてから〜」とありますが、 そもそも、DataViewは、DataSet(厳密にはDataTable)が保持するデータのフィルターなので、DataView自身がデータを保有しているわけではありません。 つまり、「Sortプロパティにソート条件をセットする」ということは、「DataViewの内容をソートする」ことではありません。 RowFilterやDataSort等のようなプロパティは、 「近い将来、このDataViewを経由するバインドコントロール(DataGridなど)が参照してきたら、DataTableの内容を、指定した条件で絞込み、更に指定したキーでSortして表示します。」という意味になります。 RowFilterやDataSortは、単なる設定であって、「ソートする」や「条件で絞り込む」といった「処理」を表すことではないことに注意して下さい。 また、 DataView.Table.Rows.InsertAt(myRow, a) のコードで、DataView.TableのTableは、DataTableの参照を表します。 従って、上記コードは、 DataSet.Table[?].Rows.InsertAt(myRow, a) と同じ意味となり、決して、DataViewが保持しているRowコレクションに行挿入しているわけではなく、実際のデータを保有しているDataSetのDataTableに対して、行挿入していることになります。 デバッガで確認していただければ分かると思いますが、上記コードの場合、DataSetのDataTableのa行目に空行が挿入されていることと思います。 |
|
投稿日時: 2003-06-30 22:45
失礼しました。(^^);
DataSortではなく、Sortプロパティです。 【誤】DataSort ↓ 【正】Sort |
|
投稿日時: 2003-07-01 09:08
ZEBRAさん御回答ありがとうございました。
どうやら根本から勘違いをしていたようですね。(^-^; まだまだ勉強が足りません。。。 でも今まで悩んでいたことがすっきりしました。 今後ともよろしくお願い致します。m(._.)m |
1
