MESCIUS SPREAD for Windows Forms 17.0J サンプルコード集
末尾に新規行を自動的に追加する

SheetViewクラスのDataAllowAddNewプロパティをTrueにすることで、ユーザーによるシート末尾への新規行の追加を許可することができます。

【実行例】 新規行の追加

新規行の追加

  • 非連結行をデータソースへ追加する場合にはSheetViewクラスのAddRowToDataSourceメソッド呼び出しを行います。但し、一意制約(主キーの設定)NULL制約を定義している場合には一般的なADO.NETの例外が発生する可能性もありますので、当メソッド呼び出しの前には各フィールドに対して適切な値を入力しておく必要があります。なお、行の連結状態は同クラスのIsRowBoundメソッド呼び出しによって取得できます。
  • 便宜上、当サンプルではデータセットを手動で作成しています。(DataSetの他にもDataTableやDataViewとの連結が可能です) SQL ServerやOracle等との接続に関する一般的な手法については各種参考文献をご参照ください。
  • 最終的なデータベースへの反映はDataAdapterのUpdateメソッド呼び出し等の対応が必要となります。また、テーブルの排他制御等についてもADO.NETの仕様に基づき適切に行う必要があります。詳細についてはMSDNライブラリをご参照ください。
  • DataRowのRowStateはセルデータの変更だけでは更新(Modified)されず、標準のDataGridViewコントロールと同様、アクティブセルが他の行に移動したタイミングで更新されます。
  • データ連結時には関連データベースフィールドのデータに基づき、列のサイズ(幅)が自動的に設定されます。また、 列のセル型列ヘッダのテキストも自動的に変更されます。

    つまり、連結によって あらかじめデザイナにて設定された各種スタイル情報は全て無効となることに注意が必要です。このような場合は、以下の各プロパティ(SheetViewクラスメンバ)を必要に応じてFalse(デフォルトはTrue)に変更するか、連結後にコーディングによって各スタイル情報を設定する等の対応も必要となります。

    [DataAutoSizeColumns] : フィールドのデータに基づき、列のサイズを自動的に変更します
    [DataAutoCellTypes] : 各列のセル型を自動的に設定します
    [DataAutoHeadings] : 列ヘッダのテキストにするデータフィールド名を自動的に割り当てます

    また、階層表示における子階層(子ビュー)も同様の仕様となるため、この場合も必要に応じて上記変更を行う必要があります。具体的には子ビュー生成のタイミングで発生するChildViewCreatedイベントを実装し、ChildViewCreatedEventArgsクラスである引数eのSheetViewに対して変更を行います。

 private void Form1_Load(object sender, System.EventArgs e)
 {

  // データセットを作成します
  DataTable DT = new DataTable();
  DataSet DS = new DataSet();
  DT = DS.Tables.Add("SampleTable");
  DT.Columns.AddRange(new DataColumn[] {
    new DataColumn("ID", Type.GetType("System.Int32")),
    new DataColumn("Text", Type.GetType("System.String")),
    new DataColumn("Check", Type.GetType("System.Boolean"))
    });

  DT.Rows.Add(new object[] { 10, "Text-10", true });
  DT.Rows.Add(new object[] { 20, "Text-20", false });
  DT.Rows.Add(new object[] { 30, "Text-30", false });
  DT.Rows.Add(new object[] { 40, "Text-40", true });
  DT.Rows.Add(new object[] { 50, "text-50", true });

  // データセットを接続します
  fpSpread1.DataSource = DS;

  // 新規行の追加を許可します
  fpSpread1.ActiveSheet.DataAllowAddNew = true;

 }
 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

  ' データセットを作成しします
  Dim DT As New DataTable
  Dim DS As New DataSet
  DT = DS.Tables.Add("SampleTable")
  DT.Columns.AddRange(New DataColumn() { _
    New DataColumn("ID", Type.GetType("System.Int32")), _
    New DataColumn("Text", Type.GetType("System.String")), _
    New DataColumn("Check", Type.GetType("System.Boolean")) _
    })

  DT.Rows.Add(New Object() {10, "Text-10", True})
  DT.Rows.Add(New Object() {20, "Text-20", False})
  DT.Rows.Add(New Object() {30, "Text-30", False})
  DT.Rows.Add(New Object() {40, "Text-40", True})
  DT.Rows.Add(New Object() {50, "Text-50", True})

  ' データセットを接続します
  FpSpread1.DataSource = DS

  ' 新規行の追加を許可します
  FpSpread1.ActiveSheet.DataAllowAddNew = True

 End Sub

 

 


© MESCIUS inc. All rights reserved.