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

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

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

Re[3]: FlexGridによるリスト管理 追加/削除


(過去ログ 15 を表示中)

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

■5492 / inTopicNo.1)  FlexGridによるリスト管理 追加/削除
  
□投稿者/ くー (11回)-(2007/07/15(Sun) 17:56:41)

分類:[VB.NET] 

お世話になります。VB.NETです。
みなさまので技術を分けていただけたらを思います。

あるフォルダに複数入っているファイルを時間及びファイル名をリスト表示します。
ファイル名は「名前.text」とし、1列目に作成時間、2列目に名前を表示します。
基本的にファイルは100までとし、101になったら最古のファイルを削除します。
ファイルが生成されると1行目(最上位行)にリストに追加していきます。

リストを追加していくと一番上が最新となります。
そこで100行が表示されており(MAX状態)、列ソートで時間を降順にしたり、名前でソートした状態で
101目が生成されると最古の行を削除しなくてはなりません。

そこで削除する場合は、
1.リストを時間でソートしなおして100行を削除する
2.ArrayList配列で内部管理しておき、最古の時間と名前を抽出して表示されている行を検出して削除する。

が考えられます。
この方法でもいいと思いますが、他に処理方法はあるのでしょうか?
あまりリスト表示処理の経験がないので、一般的といいますかみなさまの考えも教えてくだされば幸いです。


引用返信 編集キー/
■5506 / inTopicNo.2)  Re[1]: FlexGridによるリスト管理 追加/削除
□投稿者/ まどか (331回)-(2007/07/16(Mon) 23:51:37)
> 1.リストを時間でソートしなおして100行を削除する

細かな動作による差異はわかりませんが、
その程度の件数やインデックスによるアクセス(Items(index))が可能な場合、単純ループのほうが速いかもしれません。
この辺はアルゴリズムや参照型値型など別の議論に発展しそうですが。

> 2.ArrayList配列で内部管理しておき、最古の時間と名前を抽出して表示されている行を検出して削除する。

別の話になりますが、
個人的には、この2のようにデータと表示(データ)は分けることをお勧めします。
1.仕様に基づきデータコレクションを作成
2.データコレクションを元に表示データを作成
ポイントは、2の際にリスト行のTagプロパティなど(FlexGridのColRowにもその手のがあったはず)にデータオブジェクトのインスタンスを格納しておくことです。
そしてリストに表示したデータは表示のための値であり、業務処理はリンクしたデータオブジェクトを使うことです。
これにより業務処理と表示フォーマット処理が分離されお互いの仕様変更による影響が緩和されます。
#ある項目の表示位置がずれてもリスト行作成処理を直せばよいし、業務処理はリンクしたデータオブジェクトを操作するので影響なし。

早い話が、ListViewItem.TextやSubItems(n).Textは業務処理で使うなということですが
とはいえ、そこまでする必要が無いとか「使ってもいいじゃん」というのを否定するものではありません。
あくまで私は性質が違うという考えを持っており、リスト系コントロールの保持する値を業務仕様の中で「主」とするのを好みません。
引用返信 編集キー/
■5511 / inTopicNo.3)  Re[2]: FlexGridによるリスト管理 追加/削除
□投稿者/ y4yama (6回)-(2007/07/17(Tue) 08:20:17)
> この方法でもいいと思いますが、他に処理方法はあるのでしょうか?
こんちは
>101になったら最古のファイルを削除します。
(とは、フォルダからDelするのか、List上からなくするのか、あいまいなような・・・あまり主題とは関係ないですが)

101個目をどのような方法で検出するか?も関係するかも知れませんが・・・それと、100の既存のファイルの1個が
消去されて無くなることは考慮しなくてもいいのですか?
それで、3として
3.表示を更新したいときに、100個の最新のListを作る
というのが単純でミスのない方法かと、ちらっと思いました・・・
引用返信 編集キー/
■5670 / inTopicNo.4)  Re[3]: FlexGridによるリスト管理 追加/削除
□投稿者/ くー (14回)-(2007/07/19(Thu) 22:34:34)
No5511 (y4yama さん) に返信
お返事が遅くなりまして申し訳ございません。

>>この方法でもいいと思いますが、他に処理方法はあるのでしょうか?
> こんちは
> >101になったら最古のファイルを削除します。
> (とは、フォルダからDelするのか、List上からなくするのか、あいまいなような・・・あまり主題とは関係ないですが)
ファイルを削除して、LIST上で削除する動作です。


> 101個目をどのような方法で検出するか?も関係するかも知れませんが・・・それと、100の既存のファイルの1個が
> 消去されて無くなることは考慮しなくてもいいのですか?
> それで、3として
> 3.表示を更新したいときに、100個の最新のListを作る
> というのが単純でミスのない方法かと、ちらっと思いました・・・
確かに意識はしていませんでした。

そうなるとこれくらいのリストの場合は、イベントが発生したら、ファイル数を検出してリストを再描画の方が利口ですよね?
100行のリストを削除し、また100行のリストを表示となるとちらつきが気になるかと思いまして


引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -