雪国の技術的な夏

プログラミング的な話や特定のツール設定の話など。 ※ただし変態に限る。

(.NET)DebuggerDisplayの件

サンプル

[DebuggerDisplay("Id={ID}, Name={Name,nq}")]
public sealed class MyClass
{
    public int ID{ get; set; }

    public string Name { get; set; }

#if DEBUG
    public override string ToString()
    {
        return "ID=" + ID.ToString() + ", Nm=" + Name;
    }
#endif
}

Debugする分には優秀だが、
(スレッド同期などの関係でストップせずに一連で)ログに出したい際などは
ログに出てくれないので、
結局は ToString() をoverrideし、 #if DEBUG で囲むのが総合的に最適と思われる。
メソッド名/プロパティ名とか変わる際に(文字列定義なので)自動変更の対象外になっちゃうので。

ただし意図的に ToString() の実装が必要な場合は仕方がないのかなと。
その場合は ToString2() を #if DEBUG で囲んで実装すればいいや。DEBUGだし、いいや。

DataSourceにDataTableやらセットしてFilterかけたい時のアレ

作りに当たって色々注意があった。
が、開発環境がないのでメモだけ。
■やりたいこと
Windowsフォームの
・DataGridViewで
・簡単に(DataViewなどの)Filter機能を使いたかった
・できれば内部定義のクラスがデータ1件

■注意点
・DataSourceにList型入れても無駄
 ・Listにstring配列入れても無駄
 ・DataSourceに内部のクラス型を入れてもバインドしても無駄
・DataSourceにstring配列入れても無駄?
・BindingSourceとかにListやら入れても無駄
・DataTableからのものであることが必要だった気がする

■やったこと
確か
・DataTable.Rows.Add(string[])で1行データ追加
・列情報は先にフォームから追加
・DataTableの中身は初期時にテーブル列情報からコピー
・なんかバインド
・DataTable.DefaultView?. みたいなとこでフィルタ設定

こんな感じだったかも。

余裕あったらまた色々と調べなおします…