以前に、CrystalReportsで自作DataSetを元に帳票を印刷する方法を説明しましたが、説明の中に無駄な作業工程がありました。
参考記事:CrystalReportsで自作DataSetを元に帳票を印刷する
どこに無駄があるかというと、下記のイベントハンドラ処理です。
private void button1_Click( object sender, EventArgs e ) { // レコード定義を行う DataTable table = new DataTable(); table.Columns.Add("id", Type.GetType("System.String")); table.Columns.Add("name", Type.GetType("System.String")); table.Columns.Add("price", Type.GetType("System.Int32")); // 印字データを追加 DataRow row; row = table.NewRow(); row["id"] = "iten_no1"; row["name"] = "りんご"; row["price"] = 200; table.Rows.Add(row); row = table.NewRow(); row["id"] = "iten_no2"; row["name"] = "みかん"; row["price"] = 220; table.Rows.Add(row); row = table.NewRow(); row["id"] = "iten_no3"; row["name"] = "ばなな"; row["price"] = 40; table.Rows.Add(row); // 印字データをセット crystalReport1.SetDataSource( table ); crystalReport1.Refresh(); // プリンタに印刷 crystalReport1.PrintToPrinter( 0, false, 0, 0 ); } |
上記の説明ではColumns.Add()メソッドでデータセットの列定義を行っていますが、DataSet1.xsdファイルでデータセットの定義を行っているので、列定義の処理は不要でした。
xsdファイルの編集で行った成果物としてVisualStudioがRepTestTableDataTableクラスを自動生成してくれる為、このクラスのインスタンスを生成するだけでOKでした…
自動生成されるクラス名は、「xsdファイルで指定したテーブル名+”DataTable”」になります。
というわけで、以下のコードでデータセットにレコードを追加する事が可能です。
RepTestTableDataTable table = new RepTestTableDataTable(); // 印字データを追加 DataRow row; row = table.NewRow(); row["id"] = "iten_no1"; row["name"] = "りんご"; row["price"] = 200; table.Rows.Add(row); |
関連記事
コメントを残す