none
DataViewが返すDataRowViewについて RRS feed

  • 質問

  • お世話になります。

    ADO.NET 2.0(Microsoft Press)にて、ADO.NETを勉強していますが、

    DataViewが返す、DataRowViewの説明で、

    『ADO1.Xまでは、DataRowオブジェクトへの参照を保持しています。
    ADO2.0では、DataViewの中のエントリへの参照を保持します』

    と記載されており、
    DataTableのCompanyName列には、"Alfresd", "Wolski"の2レコードが入っているものとして

    DataView vue = DataView(tbl);
    vue.Sort = "CompanyName ASC";

    DataRowView row = vue[0];
    Console.WriteLine(row[0]);// Alfresdが、コンソールに表示される

    vue.Sort = "CompanyName Desc";
    Console.WriteLine(row[0]);// ADO.1.xでは、Alfresdが、コンソールに表示される
                         // ADO2.0では、Wolskiが、コンソールに表示される

    と説明がありましたが、実際プログラミングしたところ、ADO1.Xと同じ結果となりました。

    実際は、DataRowViewは、なにを参照しているのでしょうか?
    どう理解したらよいでしょうか。

    2013年4月19日 5:08

回答

  • 該当の記事を私は目にしていませんが、普通に考えればそのADO2.0(ADO.NET 2.0じゃないの?)とやらのやり方はあり得ないでしょう。

    そんな仕様であれば、以下のコードで難解な動作になってしまいます。

    DataTable table = new DataTable("sample");
    table.Columns.Add("name");
    table.Rows.Add(new object[] { "ccc" });
    table.Rows.Add(new object[] { "ddd" });
    var view = table.DefaultView;
    view.Sort = "name ASC";
    var row = view[0];
    Console.WriteLine(row[0]); // ccc
    row[0] = "eee";
    // row = view[0];
    Console.WriteLine(row[0]); // dddが表示されたら意味不明ですよね
    もちろん、途中でコメント化しているように途中でrow自体を取り直せば話は別ですが……。
    • 回答の候補に設定 星 睦美 2013年4月23日 8:09
    • 回答としてマーク 星 睦美 2013年4月25日 2:35
    2013年4月19日 6:58

すべての返信

  • 該当の記事を私は目にしていませんが、普通に考えればそのADO2.0(ADO.NET 2.0じゃないの?)とやらのやり方はあり得ないでしょう。

    そんな仕様であれば、以下のコードで難解な動作になってしまいます。

    DataTable table = new DataTable("sample");
    table.Columns.Add("name");
    table.Rows.Add(new object[] { "ccc" });
    table.Rows.Add(new object[] { "ddd" });
    var view = table.DefaultView;
    view.Sort = "name ASC";
    var row = view[0];
    Console.WriteLine(row[0]); // ccc
    row[0] = "eee";
    // row = view[0];
    Console.WriteLine(row[0]); // dddが表示されたら意味不明ですよね
    もちろん、途中でコメント化しているように途中でrow自体を取り直せば話は別ですが……。
    • 回答の候補に設定 星 睦美 2013年4月23日 8:09
    • 回答としてマーク 星 睦美 2013年4月25日 2:35
    2013年4月19日 6:58
  • フォーラム オペレーターの星 睦美です。
    Brillia さん、こんにちは

    Hongliang さんの返信が、質問の記述のコードを見直すヒントになるのではないかと思います。

    公開されているサポート情報を検索してみると、書籍の内容を訂正した情報もありますので『ADO.NET 2.0(Microsoft Press)』の書籍に関して検索してみてはいかがでしょうか?

    参考までに以下のようなサポート情報がありました。ISBN コードで検索すると、さらに検索結果がしぼりこめそうです。

    http://support.microsoft.com/search/default.aspx?query=Microsoft+Press+ADO.NET+2.0&mode=a&spid=global&1041mt=1&catalog=LCID%3D1041&x=5&y=12


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美

    2013年4月23日 8:21