2013-12-22 62 views
-2

我试图插入GridView中的每一行到一个表单击按钮。我在下面的代码中遇到的问题是,它只插入第一行,并在gridview的其余部分重复相同的记录。例如,如果我在第一行上:从点击一个按钮插入数据从一个GridView到数据库

2 ABC ATL 

它会对其余列重复此操作。我如何捕获每一行并将其插入到我的数据库中?谢谢。 这里是我的代码:

protected void Insert(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in GridView1.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      Label ID = GridView1.Rows[0].FindControl("lblID") as Label; 
      Label NAME = GridView1.Rows[0].FindControl("lblQue") as Label; 
      TextBox LOC = GridView1.Rows[0].FindControl("txtPM") as TextBox; 

      SqlConnection con = new SqlConnection(strConnString); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = 
       "insert into myTable(ID, NAME, LOC) values(@ID, @NAME, @LOC) " + 
       // "where [email protected];" + 
       "SELECT ID, NAME, LOC FROM MYTABLE"; 

      cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID.Text; 
      cmd.Parameters.Add("@NAME", SqlDbType.VarChar).Value = NAME.Text; 
      cmd.Parameters.Add("@LOC", SqlDbType.VarChar).Value = LOC.Text; 

      GridView1.EditIndex = -1; 
      GridView1.DataSource = GetData(cmd); 
      GridView1.DataBind(); 
     } 
    } 
} 
+0

GridView的是不是将数据插入数据库的正确控制。 – danish

+0

请结帐我的答案,所有的答案都看起来不错:) –

+0

我检查,它的工作就像一个魅力。谢谢你 – moe

回答

0

GridView.Rows[0]将第一行的所有行。

而不是从您的foreach声明中使用该行。

更换

Label ID = GridView1.Rows[0].FindControl("lblID") as Label; 

随着

Label ID = row.FindControl("lblID") as Label; 
+0

这为我工作。谢谢 – moe

1

问题:您使用下面的语句硬编码指数为零:

GridView1.Rows[0] 

它总是从GridView

插入第一条记录

解决方案:增加每行的行数。

试试这个:

protected void Insert(object sender, EventArgs e) 
{ 
    int index=0; 
    foreach (GridViewRow row in GridView1.Rows) 
    { 

     if (row.RowType == DataControlRowType.DataRow) 
     { 

        Label ID = GridView1.Rows[index].FindControl("lblID") as Label; 
        Label NAME = GridView1.Rows[index].FindControl("lblQue") as Label; 
        TextBox LOC = GridView1.Rows[index].FindControl("txtPM") as TextBox; 


       SqlConnection con = new SqlConnection(strConnString); 
       SqlCommand cmd = new SqlCommand(); 
       cmd.CommandType = CommandType.Text; 
       cmd.CommandText = "insert into myTable(ID, NAME, LOC) values(@ID, @NAME, @LOC) " + 
        // "where [email protected];" + 
       "SELECT ID, NAME, LOC FROM MYTABLE"; 

       cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID.Text; 

       cmd.Parameters.Add("@NAME", SqlDbType.VarChar).Value = NAME.Text; 

       cmd.Parameters.Add("@LOC", SqlDbType.VarChar).Value = LOC.Text; 

       GridView1.EditIndex = -1; 
       GridView1.DataSource = GetData(cmd); 
       GridView1.DataBind(); 


     } 
     index++; 
    } 
    } 
+0

索引++的好主意 –

0

请使用此代码

row.FindControl("lblID") as Label;,而不是GridView1.Rows[0].FindControl("lblID") as Label;

,并首先执行你的插入查询,然后打电话给你的选择查询

SqlConnection con = new SqlConnection(strConnString); 
        SqlCommand cmd = new SqlCommand(); 
        cmd.CommandType = CommandType.Text; 
        cmd.CommandText = "insert into myTable(ID, NAME, LOC) values(@ID, @NAME, @LOC) "; 

        cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID.Text; 

        cmd.Parameters.Add("@NAME", SqlDbType.VarChar).Value = NAME.Text; 

        cmd.Parameters.Add("@LOC", SqlDbType.VarChar).Value = LOC.Text; 

cmd.ExcutrNonQuery(); 

cmd.CommandText = "SELECT ID, NAME, LOC FROM MYTABLE"; 
.... //next binding code 
相关问题