none
DataTable.DefaultView のインスタンスは変わらないようにして欲しい RRS feed

  • 全般的な情報交換

  • DataTable の DefaultView が、別のインスタンスに変わってしまう場合があります。


    下のサンプルコードでは、ケース1とケース2のどちらの処理でも、この現象が発生します。
    変わってしまう前の DataView は Dispose されていないようです。

     

    サンプルコード

    DataTable dt = new DataTable("test");
    dt.Columns.Add("column1", typeof(string));
    dt.DefaultView.Sort = "column1";

     

    // 後で比較するために退避
    DataView save = dt.DefaultView;

     

    // ◆DefaultView が初期化されるケース1◆
    // (dt がすでに DataSet に含まれている場合、この問題は発生しません)
    dt.WriteXml(@"c:\test.xml", XmlWriteMode.WriteSchema);

     

    // ◆DefaultView が初期化されるケース2◆
    DataSet ds = new DataSet();
    ds.Tables.Add(dt);

     

    // 上で保存しておいた DefaultView と比べると「前と違う」が出力されます。
    Console.WriteLine(dt.DefaultView == save ? "前と同じ" : "前と違う");
    // 新しくなった DefaultView の Sort は空のため、Find はエラーになります。
    int index = dt.DefaultView.Find("value");

     

    2008年2月14日 11:25