0

我正在gridview使用 webforms 上的 asp.net,并在 TemplateField 中使用按钮视图、编辑和更新Gridview RowCommand的事件方法。GridView OnRowCommand

if (e.CommandName == "EditContract") 
  {
            GridViewRow row = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
            int SerialNo = (int)gvContract.DataKeys[row.RowIndex].Value;

            int rowIndex = ((GridViewRow)((Button)e.CommandSource).NamingContainer).RowIndex;
            gvContract.SelectRow(rowIndex);

            using (SqlCommand cmd = new SqlCommand("spContractEdit", myObj.DbConnect()))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@RoleName", SqlDbType.Char).Value = Session["RoleName"];
                cmd.Parameters.Add("@UnitName", SqlDbType.Char).Value = Session["UnitName"];
                cmd.Parameters.Add("@ContrSerialNo", SqlDbType.Int).Value = SerialNo;

                dAdapter = new SqlDataAdapter(cmd);

                DataTable DtContract = new DataTable();
                dAdapter.Fill(DtContract);
     }

if (e.CommandName == "UpdateContract") 
           {

            lblMessage.Text = "";
            lblFile.Text = "";

            GridViewRow row = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
            int SerialNo = (int)gvContract.DataKeys[row.RowIndex].Value;

            using (SqlCommand cmd = new SqlCommand("spContractUpdate", myObj.DbConnect()))
            {
                cmd.CommandType = CommandType.StoredProcedure;

             }
          } 

页面第一次加载时此代码运行良好,但之后出现 2 个问题。即 1. 当页面第一次加载时它正在编辑和更新数据,但是当我尝试编辑同一行或任何其他行时它不会。我知道这是因为我在 Page_Load 事件上定义了 !Page.IsPostback 方法,但我不知道如何解决这种情况。2. 问题是如何限制gridview 行只更新其行被选中的数据?

请建议我一个解决方案。

网格视图示例

4

1 回答 1

0

首先,您应该在 UpdateContract 中绑定 Gridview。如下所示

if (e.CommandName == "UpdateContract") {

            lblMessage.Text = "";
            lblFile.Text = "";

            GridViewRow row = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
            int SerialNo = (int)gvContract.DataKeys[row.RowIndex].Value;

            using (SqlCommand cmd = new SqlCommand("spContractUpdate", myObj.DbConnect()))
            {
                cmd.CommandType = CommandType.StoredProcedure;

***You need to bind Gridview here then it will not have to go for postback every time ***
                Gridview.datasource= datatable;
                Gridview.Databind();
}

您可以使用 updatepanel 仅更新所需的元素并避免刷新。

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
   <asp:UpdatePanel ID="UpdatePanel1" runat="server">
   <ContentTemplate>


    ***Here put your gridview***

   <asp:gridview></asp:gridview>
   </ContentTemplate>
   </asp:UpdatePanel>
于 2019-09-11T11:53:56.270 回答