【问题标题】:Disable the Edit button on all the rows when Edit button is clicked on a particular row in GridView在 GridView 中的特定行上单击编辑按钮时,禁用所有行上的编辑按钮
【发布时间】:2011-09-16 19:05:50
【问题描述】:

我有一个 5 列的 gridView,GridView 的每一行都有编辑和删除按钮。单击特定行的编辑按钮后,我想禁用其余行上的编辑和删除按钮。

下面是我的aspx

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" ShowFooter="True" EnableModelValidation="True"          onrowdatabound="GridView1_RowDataBound" onrowcommand="GridView1_RowCommand" onrowdeleting="GridView1_RowDeleting" EditRowStyle-ForeColor="Aqua"  onrowediting="GridView1_RowEditing" >

<asp:TemplateField HeaderText="Item#" >
<ItemTemplate>
<asp:Label ID="Item#" runat="server" Text='Label' ></asp:Label>
</ItemTemplate>
  </asp:TemplateField>

      ..........  

  <asp:TemplateField >
<ItemTemplate>
<asp:Button ID="btnEdit" runat="server" CausesValidation ="false" Font-Size="Smaller" CommandName="Edit" Text="Edit" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' Width="35px"/>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField >
<ItemTemplate> 
 <asp:Button ID="btnDelete" runat="server" CssClass="GridButton" CausesValidation="False" CommandName="Delete" Font-Size="Smaller" Text="Delete" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>

   protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
     if (e.CommandName == "Delete")
            {
                int x = Convert.ToInt32(e.CommandArgument.ToString());
                txtLineItemNumber.Text = (x + 1).ToString();
            }
            else
            {

               int x = Convert.ToInt32(e.CommandArgument.ToString());
               foreach (GridViewRow row in GridView1.Rows)
                {
                    if (row.RowIndex != x)
                    {
                        Button editButton = (Button)row.FindControl("btnEdit");
                        editButton.Enabled = false;
                        Button deleteButton = (Button)row.FindControl("btnDelete");
                        deleteButton.Enabled = false;
                    }
                    else
                    {
                        Button deleteButton = (Button)row.FindControl("btnDelete");
                        deleteButton.Text = "Cancel";
                        e.CommandName = "Cancel"; --- This is not possible...what should I do so that the Command Name is changed to Cancel and it does the cancel operation.
                    }

                }                 }
      }

请帮助我让它工作......

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    您所采取的方法会很好。但是,在您的标记CommandArgument='&lt;%# DataBinder.Eval(Container, "RowIndex") %&gt;' 中设置的 CommandArgument 不是对 Button 本身的引用,而是对 Button 所在的 GridView 行的索引。

    您需要从 RowCommand 事件中的 CommandArgument 检索索引,然后启用/禁用其他行上的所有按钮,如下所示:

    void gridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        switch (e.CommandName.ToLower())
        {
            case "edit":
                {
                    int rowIndex = Convert.ToInt32(e.CommandArgument);
    
                    foreach (GridViewRow row in gridView1.Rows)
                    {
                        if (row.RowIndex != rowIndex)
                        {
                            Button editButton = (Button)row.FindControl("btnEdit");
                            editButton.Enabled = false;
                            Button deleteButton = (Button)row.FindControl("btnDelete");
                            deleteButton.Enabled = false;
                        }
                    }
                }break;
        }
    }
    

    编辑(基于评论)

    尝试将修改删除按钮的代码移至 RowEditing 事件处理程序,如下所示:

    void gridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gridView1.EditIndex = e.NewEditIndex;
    
        DataBind();
    
        Button deleteButton = (Button)gridView1.Rows[e.NewEditIndex].FindControl("btnDelete");
        deleteButton.Text = "Cancel";
        deleteButton.CommandName = "Cancel";
    }
    
    void gridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        gridView1.EditIndex = -1;
    
        DataBind();
    }
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢。它起作用了,我已经粘贴了上面的代码...我想在单击一行上的编辑按钮时将删除按钮文本更改为取消。当用户单击取消按钮时,我希望取消编辑操作。请让我知道我错过了什么。
    【解决方案2】:

    您可以使用此处概述的 JavaScript,http://www.krissteele.net/blogdetails.aspx?id=92。添加逻辑以不为当前行禁用。

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      相关资源
      最近更新 更多