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

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

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

Re[7]: FlexGrigにおける行ソート


(過去ログ 15 を表示中)

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

■5294 / inTopicNo.1)  FlexGrigにおける行ソート
  
□投稿者/ くー (7回)-(2007/07/09(Mon) 22:00:53)

分類:[VB.NET] 

お世話になります。
今、100行の2列の枠を確保し、3行目まで項目を記述してます。
カラムをクリックすると各列でソートをしますが、
null?
の行が0〜96行目まで表示され、97行目〜99行目に上記の3行内容がソート表示されます。
上記の3行内容が0〜2行目までにソートされ表示する方法が分かりません。

回避策としては初めから枠をとるのではなくadditemで3行分追加してソートするしかありません。
未入力の行はソート対象外とする方法をご教授ください。

引用返信 編集キー/
■5298 / inTopicNo.2)  Re[1]: FlexGrigにおける行ソート
□投稿者/ HIRO (44回)-(2007/07/10(Tue) 08:17:23)
HIRO さんの Web サイト
No5294 (くー さん) に返信
> お世話になります。
> 今、100行の2列の枠を確保し、3行目まで項目を記述してます。
> カラムをクリックすると各列でソートをしますが、
> null?
> の行が0〜96行目まで表示され、97行目〜99行目に上記の3行内容がソート表示されます。
> 上記の3行内容が0〜2行目までにソートされ表示する方法が分かりません。
>
> 回避策としては初めから枠をとるのではなくadditemで3行分追加してソートするしかありません。
> 未入力の行はソート対象外とする方法をご教授ください。
>

ちょっとヘルプを確認してみたのですが、Sortメソッドの説明に下記記述がありました。

書式
Public Sub Sort(order As SortFlag, rg As CellRange)

引数
CellRange rg ソートする範囲のCellRangeオブジェクト。範囲を指定すると、グリッドは範囲に含まれる行だけをソートします。

との説明がありました。
くーさんが望んでいることができると思うのですがどうでしょうか?
引用返信 編集キー/
■5300 / inTopicNo.3)  Re[2]: FlexGrigにおける行ソート
□投稿者/ くー (8回)-(2007/07/10(Tue) 10:47:28)
'エクスプローラバー上で、列ヘッダのクリックによって列をソートする前に発生します。
Private Sub flex_AfterDragColumn(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.SortColEventArgs) Handles cfg_List.BeforeSort
Dim rg As C1.Win.C1FlexGrid.CellRange
rg = cfg_List.GetCellRange(1, 0, 3, 1)
'データをソートします。
cfg_List.Sort(C1.Win.C1FlexGrid.SortFlags.Ascending, rg)
End Sub

イベントを取得して、一列目の1行目から3行目までを指定しているのですが、97行目〜99行目まで移動してしまいます。
HIROさんの考え方は上記の処理だと思われるのですが、いかがでしょうか?
引用返信 編集キー/
■5301 / inTopicNo.4)  Re[3]: FlexGrigにおける行ソート
□投稿者/ HIRO (45回)-(2007/07/10(Tue) 11:03:08)
HIRO さんの Web サイト
No5300 (くー さん) に返信
> 'エクスプローラバー上で、列ヘッダのクリックによって列をソートする前に発生します。
> Private Sub flex_AfterDragColumn(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.SortColEventArgs) Handles cfg_List.BeforeSort
> Dim rg As C1.Win.C1FlexGrid.CellRange
> rg = cfg_List.GetCellRange(1, 0, 3, 1)
> 'データをソートします。
> cfg_List.Sort(C1.Win.C1FlexGrid.SortFlags.Ascending, rg)
> End Sub
>
> イベントを取得して、一列目の1行目から3行目までを指定しているのですが、97行目〜99行目まで移動してしまいます。
> HIROさんの考え方は上記の処理だと思われるのですが、いかがでしょうか?

くーさんが示されたコードは実行した結果どうだったのでしょうか?
引用返信 編集キー/
■5315 / inTopicNo.5)  Re[4]: FlexGrigにおける行ソート
□投稿者/ くー (9回)-(2007/07/10(Tue) 13:01:53)
> くーさんが示されたコードは実行した結果どうだったのでしょうか?
Dim aaa As New ArrayList
aaa.Add(dtNow.ToString("yyyy/MM/dd HH:mm:ss") & "555")
aaa.Add(dtNow.ToString("yyyy/MM/dd HH:mm:ss" & "444"))
aaa.Add(dtNow.ToString("yyyy/MM/dd HH:mm:ss" & "333"))

のarraylistを表示するとします。
表示は
yyyy/MM/dd HH:mm:ss 555
yyyy/MM/dd HH:mm:ss 444
yyyy/MM/dd HH:mm:ss 333
...
で100行まで表示

上記を実行すると

null null
null null
...
yyyy/MM/dd HH:mm:ss 333
yyyy/MM/dd HH:mm:ss 444
yyyy/MM/dd HH:mm:ss 555

となります。
引用返信 編集キー/
■5316 / inTopicNo.6)  Re[5]: FlexGrigにおける行ソート
□投稿者/ HIRO (46回)-(2007/07/10(Tue) 13:11:45)
HIRO さんの Web サイト
Sortメソッドの実行をBeforeSortイベントの中で行っているんですよね?

実際のソートはBeforeSortイベントの後に別にコントロール自身が行っているのではないでしょうか?
(だとするとくーさんが記述したSortは行われているが、コントロール自身がそのあとにソートを行ったので期待通りの結果が得られないのかな?)
ためしに、フォームにボタンを1つ用意してそのボタンのクリックイベントでくーさんが記述された下記のコードを実行するようにしてみてください。

> Dim rg As C1.Win.C1FlexGrid.CellRange
> rg = cfg_List.GetCellRange(1, 0, 3, 1)
> 'データをソートします。
> cfg_List.Sort(C1.Win.C1FlexGrid.SortFlags.Ascending, rg)
引用返信 編集キー/
■5380 / inTopicNo.7)  Re[6]: FlexGrigにおける行ソート
□投稿者/ くー (10回)-(2007/07/11(Wed) 17:16:25)
No5316 (HIRO さん) に返信
> Sortメソッドの実行をBeforeSortイベントの中で行っているんですよね?
>
> 実際のソートはBeforeSortイベントの後に別にコントロール自身が行っているのではないでしょうか?
くーは馬鹿でした。
cfg_List.BeforeSort イベントしてからソートしても仕方がないですね。
以下のソースでOKです。
HIROさんありがとうございました。

Dim rg As C1.Win.C1FlexGrid.CellRange
rg = cfg_List.GetCellRange(1, 0, 3, 1)
'データをソートします。
cfg_List.Sort(C1.Win.C1FlexGrid.SortFlags.Ascending, rg)

余談ですが
ログリスト(1000行くらいで、MAXで1行目から)を作成するにあたり
1.リスト行数を確保してSetDataで記述する
2.記述イベントで行を追加する。
HIROさんはどちらの方法を行いますか?
一概にせんたくできないと思いますが…
解決済み
引用返信 編集キー/
■5383 / inTopicNo.8)  Re[7]: FlexGrigにおける行ソート
□投稿者/ HIRO (48回)-(2007/07/11(Wed) 18:00:30)
HIRO さんの Web サイト
No5380 (くー さん) に返信
> ■No5316 (HIRO さん) に返信
>>Sortメソッドの実行をBeforeSortイベントの中で行っているんですよね?
>>
>>実際のソートはBeforeSortイベントの後に別にコントロール自身が行っているのではないでしょうか?
> くーは馬鹿でした。
> cfg_List.BeforeSort イベントしてからソートしても仕方がないですね。
> 以下のソースでOKです。
> HIROさんありがとうございました。
>
> Dim rg As C1.Win.C1FlexGrid.CellRange
> rg = cfg_List.GetCellRange(1, 0, 3, 1)
> 'データをソートします。
> cfg_List.Sort(C1.Win.C1FlexGrid.SortFlags.Ascending, rg)
>
> 余談ですが
> ログリスト(1000行くらいで、MAXで1行目から)を作成するにあたり
> 1.リスト行数を確保してSetDataで記述する
> 2.記述イベントで行を追加する。
> HIROさんはどちらの方法を行いますか?
> 一概にせんたくできないと思いますが…

んー、DataSetにデータを取得してから、FlexGridのDataSourceプロパティにセットする、かな
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -