2013-05-29 3 views
1

У меня уже есть некоторые данные в виде сетки. Теперь я хочу вставить несколько строк в gridview, а затем как это сделать?Вставка нескольких данных в базу данных из вида сетки

Если я иду на цикл foreach, тогда он будет считать количество всех строк уже там и вставлять данные несколько раз. Вместо этого я хочу, чтобы в новые строки только

Ниже мой код

private void userInsert() 
    { 
     if (MessageBox.Show("Do you want to add the new data ?", "Confirm ", MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes) 
     { 
      cmd.Connection = con; 
      cmd.CommandType = CommandType.Text; 
      try 
      { 

       foreach (GridViewRow dRow in userDataGridView.Rows) 
       { 
        cmd.CommandText = string.Format("insert into users(first_name,last_name,default_rate,default_location,spi_user_id,nickname) values('{0}','{1}',{2},{3},{4},'{5}')", userDataGridView.CurrentRow.Cells[0].Value.ToString(), userDataGridView.CurrentRow.Cells[1].Value.ToString(), userDataGridView.CurrentRow.Cells[2].Value.ToString(), locationID2ComboBox.SelectedValue, userDataGridView.CurrentRow.Cells[4].Value.ToString(), userDataGridView.CurrentRow.Cells[5].Value.ToString()); 
        con.Open(); 
        cmd.ExecuteNonQuery(); 
       } 
       MessageBox.Show("Your data has been added successfully ", "Saved info", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      finally 
      { 
       con.Close(); 
       userSelect(); 
      } 
     } 
    } 
+2

Пожалуйста, покажите нам, что вы сделали так далеко? Ваши коды! – 7alhashmi

ответ

0

Либо уследить, которые были вставлены строки (может быть сделано с помощью Tag свойства, например, или изменить SQL запрос, чтобы проверить, если данные уже присутствует

if not exists (select top 1 * from users u where u.first_name = '{0}' and u.last_name = '{1}') 
    insert into users(first_name,last_name,default_rate,default_location,spi_user_id,nickname) 
    values('{0}','{1}',{2},{3},{4},'{5}' 

вам может понадобиться больше проверок аргументов уникальности. Кроме того, я предлагаю использовать параметры с SqlCommand.

Если вы хотите использовать Tag свойство (только тогда, когда это Winforms проект!):

foreach (GridViewRow dRow in userDataGridView.Rows) 
{ 
    var check = dRow.Tag as bool? ?? false; //was row already processed? 

    if (check) 
    { 
     continue; 
    } 

    cmd.CommandText = string.Format("insert into users(first_name,last_name,default_rate,default_location,spi_user_id,nickname) values('{0}','{1}',{2},{3},{4},'{5}')", userDataGridView.CurrentRow.Cells[0].Value.ToString(), userDataGridView.CurrentRow.Cells[1].Value.ToString(), userDataGridView.CurrentRow.Cells[2].Value.ToString(), locationID2ComboBox.SelectedValue, userDataGridView.CurrentRow.Cells[4].Value.ToString(), userDataGridView.CurrentRow.Cells[5].Value.ToString()); 
    con.Open(); 
    cmd.ExecuteNonQuery(); 

    dRow.Tag = true; 
} 
0

Что идентификатор пользователя и кто создает его?

Если идентификатор пользователя равен 0 для нового пользователя его просто

foreach (GridViewRow dRow in userDataGridView.Rows) 
       { 
        if(userDataGridView.CurrentRow.Cells[<user id index>]==0) 
         { 
         //add into DB 
         } 

       } 

надежда эта помощь

0

Вы можете использовать это событие, чтобы добавить новую запись:

private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e) 
{ 
    //e.Row.Cells[0].Value <-- Use 'e.Row' argument to access the new row 
} 
Смежные вопросы