2017-08-07 18 views
0

私はdatagridviewのデータソースをデータセットとして設定しました。このデータグリッドビューに新しい行を追加したいと思います。この新しい行は編集可能で、このデータをDBに保存する必要があります。どうすればこれを達成できますか?データソースは、新しい行にDataGridviewに新しい行を追加してC#winformで編集するには?

private void button_add_Click(object sender, EventArgs e) 
{ 
    DataTable dt = dataGridView.DataSource as DataTable; 
    dt.Rows.Add(); 
    dataGridView.DataSource = dt; 
} 

//を追加します//

dataGridView.DataSource = ds.Tables[0]; 

に設定されている

//これは、新しい行が作成されますが、それは編集できません。

P.S.私はC#の初心者です

編集:どのフォームを使用せずにdatagridviewから直接追加、編集、削除することができますリンク/例を提供することができますか?

+0

これを確認しましたか?http://www.c-sharpcorner.com/UploadFile/1e050f/insert-update-and-delete-record-in-datagridview-C-Sharp/これは、ほとんどのdatagridview操作をカバーします –

+0

@SouvikGhoshこの例は、挿入するためのフォームを持っていますが、既存のデータグリッドビューに行を追加し、データを追加して保存したい –

答えて

0
private void button_add_Click(object sender, EventArgs e) { 
    foreach (DataGridViewRow row in DataGridView1.Rows) { 
     if (// condition for true) { 
      row.Rows[row that should be editable].ReadOnly = true; 
     } else if(// condition for false) { 
      row.Rows[row that schould not be editable].ReadOnly = false; 
     } 
     var value = row.Cells[cellindex].Value; 
    } 
} 
0

ここで問題があると思いますが、残りのDataGridViewをReadOnlyにしたいのですか?残念ながら、AllowUserToAddRowsとReadOnlyの2つのプロパティは矛盾しています.ReadOnlyがtrueの場合、AllowUserToAddRowsは実際に新しい行を与えますが、編集することはできません。

あなたが本当にこれをやりたいのであれば、あなたは少し創造的である必要があります。複数の方法がありますが、このようなものはうまくいくはずです。 AllowUserToAddRowsをtrueに設定し、ReadOnlyをfalseに設定します。プライベートフィールドを追加します。

private int addedRowIndex = -1; 

次はイベントのカップルを追加します。

private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e) 
{ 
    addedRowIndex = dataGridView1.NewRowIndex - 1; 
} 

private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) 
    { 
     if (!dataGridView1.Rows[e.RowIndex].IsNewRow) 
     { 
      if (addedRowIndex != e.RowIndex) 
      { 
       e.Cancel = true; 
      } 
     } 
    } 
} 

これは古い行に対するすべての変更をキャンセルする効果があります。

私はこのようなことは絶対にしません。 DataGridViewsには多くのフォームがあり、常にReadOnly true、AllowUserToAddRows falseです。新しいレコードを追加するには、ユーザーが新しいレコードを入力できるようにするModal Formを開くボタンを用意します。このレコードはデータベースに保存され、フォームが閉じられます。この時点で、DataGridViewは更新されます。私は保存する前にエントリを検証する方がずっと簡単だと分かっています。それだけでなく、特定のデータ型に対して特殊なコントロールを提供するほうがずっと簡単です。日付は非常に良い例です。私はスプレッドシート型の「利便性」のような人々を知っていますが、データベースアプリケーションはデータの整合性を最初に置くべきです。

関連する問題