【问题标题】:ASP.Net GridView Edit/Update/Cancel/Delete Events On RowClickASP.Net GridView 在 RowClick 上编辑/更新/取消/删除事件
【发布时间】:2016-03-08 19:40:25
【问题描述】:

我们有一个 ASP.Net 应用程序,其中包含一个 GridView 控件,该控件包含行编辑功能。

这允许用户编辑、删除或取消对特定行的编辑。

例如只读模式如下所示:

编辑模式如下所示:

允许用户进入编辑模式的机制是基于模板列中的编辑按钮,该按钮使用类似这样的 RowEditing 事件将选定行从只读行更改为可编辑行:

 protected void grdOfMine_RowEditing(object sender, GridViewEditEventArgs e)
{
    grdOfMine.EditIndex = e.NewEditIndex;
    ReBindDataGrid();
}

取消几乎与我们有一个按钮单击事件相反,该事件将行更改回仅就绪模式:

 protected void grdOfMine_RowEditing(object sender, GridViewEditEventArgs e)
{
    grdOfMine.EditIndex = -1;
    ReBindDataGrid();
}

(向那些已经熟悉这方面 ASP.Net 表单开发的人道歉。)

我们还创建了一个允许用户添加新行的页脚行:

我们正在寻找一种方法来扩展 ASP.Net GridView 控件,而不是使用按钮来触发事件。

例如:

  1. 允许用户通过在 Enter 键盘输入事件(而不是编辑按钮)上单击任何给定行的单元格并更新所选记录来进入行的编辑模式。
  2. 在删除键盘输入事件(而不是删除按钮)上删除记录。
  3. 以类似的方式添加记录(而不是添加按钮)。

我们曾尝试使用 Infragistics 控件来实现此功能,但是我们很难让这些功能发挥作用,因此我们决定不使用它们。

提前致谢

【问题讨论】:

    标签: asp.net gridview webforms


    【解决方案1】:

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

    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;
    
                        cmd.Parameters.Add("@ContrNewRev", SqlDbType.VarChar).Value = ddNewOrRevised.SelectedValue;
                        cmd.Parameters.Add("@ContractTitle", SqlDbType.VarChar).Value = txtContractTitle.Text;
                        cmd.Parameters.Add("@FinancerID", SqlDbType.Int).Value = ddFinancer.SelectedValue;
    }
    

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

    请给我一个解决方案。

    GridView Sample

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      相关资源
      最近更新 更多