2011-09-16 94 views
1

我在GridView的每一行上都有一個帶有5列的EditView和Delete按鈕的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. 
        } 

       }     } 
     } 

請幫我得到它的工作.....

回答

1

您採取的方法將正常工作。然而,在標記CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'中設置的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(); 
} 

希望這會有所幫助。

+0

謝謝。它的工作,我已經粘貼上面的代碼...我想更改刪除按鈕文本取消,當編輯按鈕單擊一行。當用戶點擊取消按鈕時,我想要取消編輯操作。請讓我知道我錯過了什麼。 – Janet

相關問題