2013-12-22 4 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

pls checkout мой ответ, все ответы выглядят хорошо :) –

+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 
Смежные вопросы