DOBON.NETプログラミング道掲示板

■34161 / 1階層)  データセット定義ファイルからDataTable
□投稿者/ 魔界の仮面弁士 大御所(1203回)-(2019/02/25(Mon) 17:15:40)
  • アイコンNo34159に返信(ナンバーさんの記事)
    > var dt = new DataTable();
    > dt = MyDataSet.SimpleProduct();

    dt への代入を 2 回行っているのは何故でしょうか?

    たとえば普段、
     string s = ""; // 1 回目の代入
     s = textBox1.Text; // 2 回目の代入
    と書くのではなく、
     string s = textBox1.Text; // 1 回目の代入
    と書きますよね。


    > 1.SimpleProductというDataTableをインスタンス化するには、このような方法をとりましたが
    > あってるでしょうか?

    そもそも『dt = MyDataSet.SimpleProduct();』だとコンパイルエラーになりませんでしたか?


    // 案1
    var ds = new MyDataSet();
    var dt = ds.SimpleProduct;

    // 案2
    var dt = new MyDataSet().SimpleProduct;

    // 案3
    var dt = new MyDataSet.SimpleProductDataTable();


    お奨めは 案1 ですが、どの方法でも構いません。
    ただし 案3 の方法だと、dt.DataSet が null になる点にご注意ください。


    上記の dt は System.Data.DataTable 型ではなく、それを継承した
    プロジェクトの名前空間.MyDataSet.SimpleProductDataTable 型である点が肝です。



    > 2.
    > Form上のボタンを押すたびに、
    > このDataTableに行を追加したいと思います。

    (1) MyDataSet.xsd を含むプロジェクトをコンパイルします。

    (2) フォームデザイナーを開くと、ツールボックス先頭に "MyDataSet" が現れるので、
     それを Form1 にドロップします。"myDataSet1" が貼られるはず。

    (3) button1_Click に以下を記述します。
    this.myDataSet1.SimpleProduct.AddSimpleProductRow("1", "A", 100);


    今回の場合、id 列が主キー設定されているようなので、
    同じ id を追加で登録しようとすると、キー重複で制約エラーになります。
    (ただし DataSet の EnforceConstraints を false にしていた場合は、制約エラーが無視されます)


    > dt.Rows.Add(dt.NewRow()); // ←ここでエラー発生
    > dt.[0]["id"] = "1";
    > dt.[0]["ProductName"] = "A";
    > dt.[0]["Price"] = "100";

    「dt.Rows.Add(dt.NewRow());」は実行時エラーで済みそうですが、
    その後の「dt.[0]」という構文は、そもそもコンパイルエラーになりませんか?


    それと、Price 列が 数値(int とか decimal とか)ではなく
    数字(string) な点も気にかかります。
    列のデータ型は、DataSet デザイナーで列を選択して、
    DataType プロパティから確認できますので、確認しておいてください。



    > 行を追加するにはどのようにすればいいでしょうか?

    【型付の DataTable に行を追加する場合】
    // 案1
    dt.AddSimpleProductRow("1", "A", 100);


    // 案2
    var newRow = dt.NewSimpleProductRow();
    newRow.id = "1";
    newRow.ProductName = "A";
    newRow.Price = 100;
    dt.AddSimpleProductRow(newRow);




    【素の DataTable に行を追加する場合】
    // 案1
    dt.Rows.Add("1", "A", 100);

    // 案2
    DataRow newRow = dt.NewRow();
    newRow["id"] = "1";
    newRow["ProductName"] = "A";
    newRow["Price"] = 100;
    dt.Rows.Add(newRow);
違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←データセット定義ファイルからDataTable /ナンバー →Re[2]: データセット定義ファイルからDataTable /ナンバー
 
上記関連ツリー

Nomalアイコン データセット定義ファイルからDataTable / ナンバー (19/02/25(Mon) 16:27) #34159
Nomalアイコン データセット定義ファイルからDataTable / 魔界の仮面弁士 (19/02/25(Mon) 17:15) #34161 ←Now
  └Nomalアイコン Re[2]: データセット定義ファイルからDataTable / ナンバー (19/02/26(Tue) 14:10) #34162 解決み!
    └Nomalアイコン Re[3]: データセット定義ファイルからDataTable / 魔界の仮面弁士 (19/02/26(Tue) 16:41) #34163 解決み!

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -