2013-03-11 5 views
7

Я показываю таблицу базы данных в datagridview. Я могу правильно сохранить записи из datagridview в базу данных в sql.Сохраните отредактированные данные в строках

Теперь я хочу изменить и изменить некоторые записи и сохранить эти изменения в базе данных. Как я могу это сделать? Я использую привязку datasource, прикрепленную к набору данных с datatable.

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.cPDM0020TableAdapter.Fill(this.cpdm_dataset.CPDM0020); 
} 

private void btnSave_Click(object sender, EventArgs e) 
{ 
    string code = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper(); 
    string currency_Name = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper(); 
    string boolBase = dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string local_per_Base = dataGridView1[3, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string base_per_Local = dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string insert_sql = "INSERT INTO centraldb.dbo.CPDM0020(Code,Currency_Name,Base,Local_per_Base,Base_per_Local)VAL‌​UES('" + 
     code + "','" + 
     currency_Name + "','" + 
     boolBase + "','" + 
     local_per_Base + "','" + 
     base_per_Local + "')"; 

    if (this.ExecuteSql(insert_sql)) 
    { 
     MessageBox.Show("Record Inserted Successfully."); 
    } 
    else 
    { 
     MessageBox.Show("Insert Failed"); 
    } 
} 

public bool ExecuteSql(string command) 
{ 

    SqlCommand sqlCommand = new SqlCommand(command, connection); 
    connection.Open(); 
    sqlCommand.ExecuteNonQuery(); 
    this.cPDM0020TableAdapter.Fill(this.cpdm_dataset.CPDM0020); 
    dataGridView1.DataSource = cpdm_dataset.CPDM0020; 
    sqlCommand.Dispose(); 
    connection.Close(); 
    return true; 
} 

Я могу сохранить новые записи в базе данных легко и datagridview, но я не могу изменить, уже присутствующий records..On нажав на кнопку сохранить после редактирования, она показывает предыдущее значение снова. Пожалуйста помоги.

ответ

0

Попробуйте использовать следующий код>

try 
{ 
    var row = gvTransactions.CurrentRow; 
    int ID= int.parse(row.Cells[0].Value.ToString()); 
    string abc=row.Cells[0].Value.ToString(); 
} 
catch(exception ex) 
{ 
} 

Получить значения, как это.

Примечание: Не писать любую вещь в блоке поймать

, а затем запрос пожарной вставки/обновления в соответствии с вашими потребностями.

+0

Вы не можете объявлять переменные в блоке Ьгу, они будут потеряны после попытки закончилась. – Flater

+1

Кроме того, обработка исключений Pokémon - это, как правило, плохая идея. – Flater

+0

Это мой код: частная пустота Form1_Load (объект отправителя, EventArgs е) { this.cPDM0020TableAdapter.Fill (this.cpdm_dataset.CPDM0020);} – user2156513

2

Ваша база данных не контролируется вашим приложением; он не собирается отправлять какое-либо событие обратно в ваше приложение, когда данные были изменены. Вы должны активно запрашивать базу данных для изменений.

Более типичный подход с DataGridView заключается в том, чтобы сначала применить изменения к локальной копии данных, а затем вносить изменения в базу данных с помощью DataAdapter. Это позволяет избежать обновления всего локального набора данных в любое время при внесении изменений. См. Обновление источников данных с помощью DataAdapters (ADO.NET).

Основная последовательность:

  1. Подключение к источнику данных, используйте DataAdapter.Fill(), чтобы заполнить ваш стол данных
  2. определить UpdateCommand или InsertCommand, который определяет, как будет выталкиваться данные в локальном DataTable к базе данных
  3. Добавить строку в ваш локальный DataTable
  4. Вызовите DataAdapter.Update(), чтобы вывести обновления в базу данных.
1

Просто вы должны проверить, если запись существует в таблице первой с помощью Select Command

"Select * из centraldb.dbo.CPDM0020 Где Code = '" + код + "'";

вы можете использовать эту функцию:

public bool IsExistRecord(string Query) 
    { 
     try 
     { 
      DataTable DT = new DataTable(); 
      SqlCommand CMD = new SqlCommand(Query, Connection); 
      SqlDataAdapter DA = new SqlDataAdapter(CMD); 
      DA.Fill(DT); 

      if (DT.Rows.Count > 0) 
       return true; 
      else 
       return false; 

     } 
     catch (Exception ex) 
     { 
      return false; 
     } 
    } 

, если запись существует выполнить запрос на обновление, если не существует выполнить вставку запроса.

0

сделать кнопку обновления:

private void btnUpdate_Click(object sender, EventArgs e) { 
    string code = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper(); 
    string currency_Name = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper(); 
    string boolBase = dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string local_per_Base = dataGridView1[3, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string base_per_Local = dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string select_qry = "Select * from centraldb.dbo.CPDM0020 Where Code = '" + Code + "'"; 
    if(IsExistRecord(select_qry)) 
    { 
    string update_qry = Update centraldb.dbo.CPDM0020 set Code,Currency_Name='" + currency_Name + "',Base='" + boolBase + "',Local_per_Base,Base_per_Local='" + base_per_Local + "' where code='" + code +"'"; 
    if (this.ExecuteSql(update_qry)) { 
     MessageBox.Show("Record Updated Successfully."); 
    } else { 

     MessageBox.Show("Update Failed"); 
    } 
    } 
} 
    //code taken from Mohammad abumazen 
public bool IsExistRecord(string Query) 
{ 
     DataTable DT = new DataTable(); 
     SqlCommand CMD = new SqlCommand(Query, Connection); 
     SqlDataAdapter DA = new SqlDataAdapter(CMD); 
     DA.Fill(DT); 

     if (DT.Rows.Count > 0) 
      return true; 
     else 
      return false; 

    } 
0

Поскольку вы используете dataSet, вы можете создать команды в вашем tableApdater. Вот статья о Creating a Data Access Layer, так как вы в winforms, вы можете применить эту статью в своем проекте.

Я надеюсь, что это изображение даст вам подсказку для save, update, edit, delete.

enter image description here