2009-07-22 8 views
1

私は最初に空のデータテーブルにバインドされているdatagridviewを持っています。次に、グリッドのCurrentRow.DataBoundItem行の列に値を設定することによって、最初の行が移入されます。 最後のブランク行に値を入力して、手動で新しい行を入力します。 DataTable dt =(DataTable)MyGrid.DataSource .......DataGridView.DataSourceにグリッド(.NET)の新しい行がありません

私はdtの行数がグリッドに表示されている2つではなく1であることに気付きました。しかし、最初に行のEnterキーを押してから「保存」をクリックすると、行数は3になります。2つの塗りつぶし行と、Enterキーによる新しい行。

Enterキーを押さずにデータテーブルに2行を配置するにはどうすればよいですか?

を(私はプログラムでキーストローク入力し送信したくない)私は、新しい行を受け入れるようにEndEdit()とUpdateCellValue()を呼び出すことを試みたが、データソースはまだ一つだけの行を示しています。

+0

イベントごとに正しくリバインディングしていますか? – Jason

答えて

0

データテーブルにバインドする代わりに、グリッドがバインドするバインディングソースを追加する必要がありました。

0

私は最近similar questionと答えました。変更をデータベースに保存する前にForm.Validate()を使用してデータを基になるビジネスオブジェクト(DataTable)にプッシュバックする必要があります。

+0

私は既にValidate()を使用していました –

0

DataTableに挿入した後、グリッドが再バインドされていることを確認してください。

myGrid.DataSource = dt; 
myGrid.DataBind(); <----- 
+0

私はデータテーブルにバインドしていません。グリッドのデータソースからグリッドから値を取得するためのデータテーブルへの参照を取得しています。 –

1

私が思うように、ウィンドウについて話しているのであれば、ds.AcceptChanges()を追加することができます。

if (txtUserId.Text.Trim() != "" && txtPasswoed.Text.Trim() != "" && txtUserName.Text.Trim() != "") 
      { 
       DataRow r = ds.Tables[0].NewRow(); 
       r["userName"] = txtUserName.Text.Trim(); 
       r["ID"] = txtUserId.Text.Trim(); 
       r["Password"] = txtPasswoed.Text.Trim(); 
       ds.Tables[0].Rows.Add(r); 

       ds.AcceptChanges(); 

       txtPasswoed.Clear(); 
       txtUserName.Clear(); 
       txtUserId.Clear(); 
      } 
関連する問題