2008年03月31日

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

三回目。今回はソートしたときに DataGridView が無視してくれる問題についてです。といってもまあ自明の理なんですがね、

まず IBindingList の解説を少し引用しましょう。

ApplySort メソッドまたは RemoveSort メソッドを呼び出す場合は、Reset 列挙体を使用して ListChanged イベントを発生させてください。

ということでこれが原因です。このイベントを使わないと、DataGridView はデータソースにソートが適用されたタイミングを窺い知ることができません。

ではさくさく実装していきましょう。

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

2008年03月29日

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

前回の続き。今回はソート機能の実装です。あ、その前に言っておくと、この TwoDimensionalArrayView<T> クラスはできる限り DataView に近づけたクラス構成にするつもりです。

さて、ソートの実装自体はそんなに難しいことではないでしょう。まず前回の雛形からソート関連の部分をピックアップします。

private List<TwoDimensionalArrayRowView<T>> arrangedViews;
bool IBindingList.SupportsSorting { get { return false; } }
bool IBindingList.IsSorted {
    get { throw new NotSupportedException(); }
}
ListSortDirection IBindingList.SortDirection {
    get { throw new NotSupportedException(); }
}
PropertyDescriptor IBindingList.SortProperty {
    get { throw new NotSupportedException(); }
}
void IBindingList.ApplySort(PropertyDescriptor property,
                            ListSortDirection direction) {
    throw new NotSupportedException();
}
void IBindingList.RemoveSort() {
    throw new NotSupportedException();
}

次に DataView のソート関連のメンバをピックアップ。

public bool ApplyDefaultSort { get; set; }
public string Sort { get; set; }

このうち ApplyDefaultSort は、「PrimaryKey を持っている DataTable の Sort が空のとき」に「PrimaryKey を使ってソートする」かどうか、というプロパティなので二次元配列には関係なし、除外。

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

2008年03月27日

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

前回の 二次元配列をビュー では取り敢えず二次元配列をデータソースとして扱えるビューを作りました。今回はもうちょっと拡張します。長くなりそうなので連載形式で順次改造していくことにしようかと思っています。

データにはソートがつき物です。二次元配列自体はソートできませんが、そのビューならソートできてもおかしくありません。DataTable も行の並び替えはありませんが DataView にはソートが用意されていますし。

前回の TwoDimensionArrayView ではソートをサポートしていませんでした。というかそもそも前回のような実装ではソートの実現は困難です。構成から見直す必要があります。

その前にまず DataGridView などでカラムをクリックしたときなどにどのようにしてソートが実現されるのかを確認しましょう。前回にも書いた、データソースに使用できるインターフェイスを再掲します。

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

2008年02月23日

二次元配列をビュー

多次元配列を私は嫌っていますが、世間的にはそれなりに人気のようです。DataGridViewに2次元配列のレコードを表示させたい と言うスレッドでは、二次元配列を DataGridView の DataSource にできないかという話が出ました。もっとも質問が微妙で、単純にデータソースとして二次元配列を使いたいのか、それとも既にデータソースに DataTable を設定していてそれにデータを追加したいのか判断に迷うところではありましたけど。

二次元配列なぞさっさと捨てるのが幸せになる方法だと思っているのですが、それはそれとして技術的興味はあります。

まず、データソースに使用できるものを調べてみます。DataGridView.DataSource プロパティ の解説によると、以下のいずれかと言うことになります。

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

2007年10月21日

String^ からポインタへ

今回は珍しく C++/CLI のお話。なお、C# と混ざると型名がややこしくなるので、今回はマネージドの型については CLR の汎用型名で統一します。

今ふと思い立ってとある C 言語のライブラリを C++/CLI でラップしようと試みているところなのですが、そこでふと気になったのが多分 C++/CLI 使う人たちが一度は立ち止まる問題である、String^ から wchar_t* への変換のこと。

一般的には、ToCharArray の先頭要素のアドレスを pin_ptr<wchar_t> で受けたり、Marshal::StringToHGlobalUni でポインタにしたりする、と言う風な解説がなされますが、これらはメモリのコピーが発生するためどうしてもパフォーマンスに影響が出てきます。後者なんか FreeHGlobal の呼び出し責任も出てきますし。

続きを読む
posted by Hongliang at 14:43| Comment(6) | TrackBack(0) | C++/CLI | このブログの読者になる | 更新情報をチェックする

2007年08月31日

EnumDisplayName

お久しぶりです。自分のとこですが。

ちょうど書くネタが現れたので、久々に記事を書いてみました。ネタ元は propertyGridで、プロパティ値を日本語表示したい というスレッド。

列挙型をプロパティグリッドに表示する際に、別名で表示したい。それには TypeConverter 属性を指定すればいいんですが、それを一々列挙型ごとに EnumConverter 派生クラスを作るのは面倒だと。

で、まあ上記のスレッドに私が書いたようなのが基本だと思うので、それをそのままコードに起こしてみました。というか試して動作を確認してから書いてるんで順序が逆なんですが。でも面倒なんで C# だけ。

コード
posted by Hongliang at 23:42| Comment(0) | TrackBack(1) | C# | このブログの読者になる | 更新情報をチェックする

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

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

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

×

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