0

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

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

我正在使用 Asp.net(C#)。

例如

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

1 回答 1

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

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

于 2013-10-11T17:21:48.060 回答