2008年04月09日

二次元配列をもっとビュー 5

最終回の今回は検索機能を実装します。まあありきたりなことをするだけですが。

まず検索に使用する IBindingList のメンバを雛形から、また DataView のメンバもピックアップ。

bool IBindingList.SupportsSearching { get { return false; } }
void IBindingList.AddIndex(PropertyDescriptor property);
void IBindingList.RemoveIndex(PropertyDescriptor property);
int IBindingList.Find(PropertyDescriptor property, object key);
public int Find(object key);
public int Find(object[] key);
public DataRowView[] FindRows(object key);
public DataRowView[] FindRows(object[] key);

取り敢えず SupportsSearching は true 返すだけですね。

続きを読む
posted by Hongliang at 01:25| Comment(0) | TrackBack(0) | C# | このブログの読者になる | 更新情報をチェックする

2008年04月06日

二次元配列をもっとビュー 4

四回目。前回は Sort プロパティを設定したときに DataGridView などに通知する機構を追加しました。今回は要素が変更されたときの通知です。なお、面倒なので以降の記事では TwoDimensionalArrayView を ArrayView と、TwoDimensionalArrayRowView を ArrayRowView と書くことにします。

話しに入る前に、前回の終わりでちらっと触れた AllowEdit を書き換えておきましょう。これで DataGridView で表示しているときに値を編集できるようになります。まあ後からコードで AllowEdit を操作することもできるんですが、一般的には編集可能がデフォルトでしょうし。

// デフォルト値を変更
private bool allowEdit = true;

ListChangedEventArgs で利用される ListChangedType 列挙体には、リスト全体が変更となったことを表す Reset の他に、ItemAdded や ItemDeleted、ItemMoved などが存在しています。固定長である二次元配列には一見縁がなさそうですが、ListChanged イベントの対象となるリストは飽くまで ArrayView、つまり ArrayRowView の並び方が問題なのです。値を変更した結果 ArrayRowView の順序が変更されれば ItemMoved の ListChanged イベントを起こすさせる必要があります。また今回取り扱う予定はありませんが Filter(RowFilter)が適用されているとき(Filter を適用したタイミングでは Reset です)、そのフィルタから外れるように値が変更された場合は ItemDeleted の ListChanged を起こすことになります。

続きを読む
posted by Hongliang at 02:31| Comment(0) | TrackBack(0) | .NET | このブログの読者になる | 更新情報をチェックする

ここ(hongliang.seesaa.net)で公開しているものについて、利用は自由に行って頂いて構いません。改変、再頒布もお好きになさって下さい。利用に対しこちらが何かを要求することはありません。

ただし、公開するものを使用、または参考したことによって何らかの損害等が生じた場合でも、私はいかなる責任も負いません。

あ、こんなのに使ったってコメントを頂ければ嬉しいです。

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。