2016-12-04 21 views
0

私はIDを与えて強​​調表示されたボタンをクリックすると、データベースから取得したdatagridviewに情報を表示します。 First Formdatagridviewからの変更がデータベースに保存されていません

ボタンのコードはここにある:私たちはこれを取得、データベースから何かを得る

private void kerkoButton_Click(object sender, EventArgs e) 
    { 
     try 
     {    
      Konektimi(); 
      string query = "SELECT * FROM Vizita WHERE [email protected]"; 

       using (SqlCommand command = new SqlCommand(query, conn)) 
       { 

        command.Parameters.AddWithValue("@pacientiId",pacientiTextBox.Text);            
        conn.Open(); 
        using (SqlDataReader reader = command.ExecuteReader()) 
        { 
         if (reader.HasRows) 
         { 
          DataTable dt = new DataTable(); 
          dt.Load(reader); 
          forma.vizitaDataGridView.DataSource = dt; 
          forma.ShowDialog(); 
         } 
         else 
         { 
          MessageBox.Show("Nuk ka të dhëna për këtë pacient"); 
         } 
        } 
        conn.Close(); 
       } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

Suposing: Second Form,with the results

これは、クリックした後に開かれる新しい形ですkerkoButton。

現在、問題は次のとおりです。行(または一部の行)を編集するときに[保存]をクリックすると、変更がデータベースに保存されません。 どうすればいいですか? このデータグリッドフォームにSaveButtonを作成できますか?はいの場合はどうすればよいですか?

答えて

0

あなたがそうのような財産あなたのDataGridViewのCurrentRowを使用して編集した行にアクセスすることができ、「how to update row in DataGridView?

を見てみましょう:あなたは、一切編集行を更新したい場合は、代わりに

DataRowView dataRowView = yourDataGridView.CurrentRow.DataBoundItem as DataRowView; 
DataRow[] rowsToUpdate = new DataRow[] { dataRowView.Row }; 

SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Vizita", con); 
SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 
adapter.Update(rowsToUpdate); 

一度フラグを作成し、PropertyChangedイベントを使用してプロパティを変更するたびにtrueに設定する必要があります。

[保存]をクリックすると、すべての行が繰り返し処理され、編集した行がrowsToUpdateに追加されます。

+0

データバインディングを正しく使用すると、DataTableは独自の変更を追跡し、必要な処理はアダプタでUpdateを呼び出すことだけです。グリッド行を反復処理している場合、間違っています。 – Crowcoder

関連する問題