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();
            }
        }
    }
4

3 回答 3

0

什么是用户 ID,由谁生成?

如果新用户的用户 ID 为 0,则很简单

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

                }

希望这有帮助

于 2013-05-29T10:51:08.677 回答
0

您可以使用此事件添加新记录:

private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e)
{
     //e.Row.Cells[0].Value <-- Use 'e.Row' argument to access the new row
}
于 2013-05-29T12:54:14.493 回答
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;
}
于 2013-05-29T10:09:37.863 回答