vishnu suresh
vishnu suresh

Reputation: 11

Update whole contents in gridview via single button click

I need to update my whole gridview details via single button click. Now I have a coding. But I edit the grid view and click the update button, then the first row only update, remainins are not update. pls help. This is my code.

protected void Button8_Click(object sender, EventArgs e)
    {
        int RowIndex = 0;
        {
                GridViewRow row = (GridViewRow)GridView1.Rows[RowIndex];
                TextBox txtcode = row.FindControl("txtcode") as TextBox;
                TextBox txtalt = row.FindControl("txtalt") as TextBox;
                TextBox txtdetail = row.FindControl("txtdetails") as TextBox;
                SqlConnection myConnection = new SqlConnection("Data Source=SOMATCOSVR2015;
                                 Initial Catalog=SimsVisnu;User ID=sa;Password=aDmin123");
                SqlCommand cmd = new SqlCommand("UPDATE Qtattemp SET Code = @Code, 
                                    details = @details WHERE Code = @Code", myConnection);
                cmd.Parameters.AddWithValue("@Code", txtcode.Text.Trim());
                cmd.Parameters.AddWithValue("@details", txtdetail.Text.Trim());
                myConnection.Open();
                cmd.ExecuteNonQuery();
                GridView1.EditIndex = -1;
                DataBind();
                Response.Redirect(Request.Url.AbsoluteUri);
        }
    } 

Upvotes: 0

Views: 1345

Answers (1)

Rahul Singh
Rahul Singh

Reputation: 21795

Because you are only specifying the index of first row. You need to loop through each row like this:-

int totalRows = GridView1.Rows.Count;
for (int RowIndex = 0; i < totalRows; RowIndex++)
    {
        GridViewRow row = GridView1.Rows[RowIndex];
        TextBox txtcode = row.FindControl("txtcode") as TextBox;
        TextBox txtalt = row.FindControl("txtalt") as TextBox;
        TextBox txtdetail = row.FindControl("txtdetails") as TextBox;
        SqlConnection myConnection = new SqlConnection("Data Source=SOMATCOSVR2015;
                                Initial Catalog=SimsVisnu;User ID=sa;Password=aDmin123");
        SqlCommand cmd = new SqlCommand("UPDATE Qtattemp SET Code = @Code,
                                   details = @details WHERE Code = @Code", myConnection);
        cmd.Parameters.AddWithValue("@Code", txtcode.Text.Trim());
        cmd.Parameters.AddWithValue("@details", txtdetail.Text.Trim());
        myConnection.Open();
        cmd.ExecuteNonQuery();
     }
 Response.Redirect(Request.Url.AbsoluteUri);

Also, I would suggest to create a separate layer to handle DB operations. Consider using the using statement while executing SQL related queries. Also read Can we stop using AddWithValue.

Update:

Side Note:

1) Bind your gridview inside !IsPostBack.
2) Don't bind the gridview again, either inside the loop or outside.
3) I don't find any reason to update the EditIndex using GridView1.EditIndex. Don't update it.

Upvotes: 1

Related Questions