gridview中的更改如何反映在数据库中?技术上

时间:2013-10-11 17:17:40

标签: c# asp.net gridview

像答案应该是技术性的,我知道填写和更新网格视图和其他控件的代码,但我实际上并不确切知道它是如何做的?

像我在GRID VIEW中更改行并单击更新一样,它也会更改(更新)数据库中的数据,有人说适配器会这样做,但即使在我的更新代码(OnRowUpdate Event)中也没有SQ L Adapter的任何对象怎么来的?

我使用的是Asp.net(C#)。

e.g。

protected void gvTest_RowUpdating(Object sender, GridViewUpdateEventArgs e) 
{
    int index = e.RowIndex;
    TextBox txtBoxName = (TextBox)gvTest.Rows[index].FindControl("txtboxTest");
    int pk = Convert.ToInt32(gvTest.DataKeys[index].Value);
    //Response.Write("Index_update="+ pk);

    SqlConnection sqlCon = new SqlConnection(constrng);
    SqlCommand sqlcomm = new SqlCommand("update login set name= @name where stid=@pk",sqlCon);
    sqlcomm.Parameters.AddWithValue("@name", SqlDbType.VarChar).Value = txtBoxName.Text;
    sqlcomm.Parameters.AddWithValue("@pk", SqlDbType.VarChar).Value = pk;

    try
    {
        sqlCon.Open();
        sqlcomm.ExecuteNonQuery();
        connectToDb();
        Response.Write("<br/>" + "UPDATE STATEMENT=DONE");

    }
    catch (Exception ex) 
    {
        Response.Write("<br/>"+ ex.Message);
    }
    finally
    {
        sqlCon.Close();
    }

1 个答案:

答案 0 :(得分:1)

代码看起来非常简单。更新行时,它会触发此方法处理的RowUpdating事件。在这种方法......

您可以从UI中更新的行中获取值:

int index = e.RowIndex;
TextBox txtBoxName = (TextBox)gvTest.Rows[index].FindControl("txtboxTest");
int pk = Convert.ToInt32(gvTest.DataKeys[index].Value);

您定义SQL连接和命令以在数据库中执行UPDATE语句:

SqlConnection sqlCon = new SqlConnection(constrng);
SqlCommand sqlcomm = new SqlCommand("update login set name= @name where stid=@pk",sqlCon);
sqlcomm.Parameters.AddWithValue("@name", SqlDbType.VarChar).Value = txtBoxName.Text;
sqlcomm.Parameters.AddWithValue("@pk", SqlDbType.VarChar).Value = pk;

您对数据库运行命令:

sqlCon.Open();
sqlcomm.ExecuteNonQuery();

现在,有更好的方法来构建所有这些。 (当然,几乎总有更好的方法可以做任何事情。)但在理想的情况下,这段代码所做的事情非常清楚。