【问题标题】:Gridview: Sql Update statement "Where RowID=Current editing row number" , how to set it in update statment?Gridview: Sql Update 语句 "Where RowID=Current editing row number" ,如何在更新语句中设置?
【发布时间】:2012-04-13 07:14:44
【问题描述】:

我有一个简单的 gridview 和 sqldatasource 来将数据从数据表绑定到 gridview。

  • //“Column”是一列,类型:int,加一,主键

// ID 只是一个列类型 int 这是我在行更新事件中的代码:

 string con = "conn string";

            string sqlQuery = "Update TableName set Column = @Column WHERE RowID = '1' (//here I need to get the current editing row number)";
            using (SqlConnection dataConnection = new SqlConnection(con))
            {
                using (SqlCommand dataCommand = new SqlCommand(sqlQuery, dataConnection))
                {
                    int vas = 121;
                    dataCommand.Parameters.AddWithValue("Column", vas);
                    dataConnection.Open();
                    dataCommand.ExecuteNonQuery();
                    dataConnection.Close();

                }

            }

这是我的问题:

1.对于这段代码:string sqlQuery = "UPDATE mytable SET ID = '131' WHERE No = '1'";

  • 我不想设置 No fixed ,我想这样设置 No=CurrentEditingRowNumber 但我不知道该怎么做 让它发挥作用。
  • 我知道如何获取当前编辑(这样想):GridViewRow 行 = GridView1.Rows[e.RowIndex];
  • 但我不知道如何在更新语句中使用它

2.对于上面的代码,如果我在浏览器中打开它,假设有 2 行( 1 和 2 ),我的代码说如果 No = 1 则更新。

如果按更新到第一行没有任何反应,但如果我从第二行按更新,则代码将在第一行执行,因为它是编码的。我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: c# asp.net sql


    【解决方案1】:

    使用 CommandArgument 并在 Gridview onrowcommand 事件中获取该值。

    <asp:LinkButton ID="btnUpdate" runat="server" CommandArgument='<%#Eval("RowID")%>' CommandName="btnUpdate" Text="Update">
    
      protected void GridView_RowCommand(Object sender, GridViewCommandEventArgs e)
      {
        if(e.CommandName=="btnUpdate")
        {
          int index = Convert.ToInt32(e.CommandArgument);
          string sqlQuery = "Update TableName set Column = @Column WHERE RowID = index;
          //now bind your gridview here using index id.
        }
      }
    

    【讨论】:

    • 链接按钮是怎么回事,因为我没有,你是说gridview中的更新按钮吗?
    • 没错,如果你愿意,可以使用 Button,但想法是获取 rowID。
    • 我这样做了:pastebin.com/fMvriWdD,但是..我只能将值设置为第一行,当我按下编辑按钮时,更新按钮没有任何反应,但是当我按下编辑按钮时第二行我可以看到第一行的值发生了变化,但是..那是错误的
    • 断点并检查您是否进入命令事件并获取rowId。
    • 我一直不明白如何使用断点,所以我在哪里设置断点?然后呢?
    【解决方案2】:

    您需要在 gridview 设置中指定更新 ID。这里我给大家做个小demo

    <asp:ImageButton ID="imgBtnEdit" runat="server" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" ToolTip="Edit Record" ImageUrl="~/images/edit.gif" OnClick="imgEdit_OnClick" />
    

    和您执行操作的 Onclick 事件

     protected void imgEdit_OnClick(object sender, ImageClickEventArgs e)
        {
            ImageButton im1 = (ImageButton)sender;
            GridViewRow grv1 = (GridViewRow)im1.Parent.Parent;
            string id = grv1.Cells[0].Text.ToString();
            // pass this Id value into your query string for update operation. better way you follow three-tier architecture.
        }
    

    如果您还有其他需要,可以在这里回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      相关资源
      最近更新 更多