2016-08-02 10 views
0

Meine Frage ist: Was ist die ID einer Bearbeitungsschaltfläche definiert als ein CommandField in einem GridView? Ich möchte in der Lage sein, diese Schaltfläche mit der FindControl-Methode im Code-Behind zu verweisen, aber da ich die ID der Edit-Schaltfläche nicht kenne, kann ich nicht. Ich muss es per Index referenzieren. Erhalten Sie einen Verweis auf die Bearbeitungsschaltfläche in einer Gridview mit FindControl

Dies ist das Detail, was ich tun werde versuchen:

Ich habe ein ASP.NET 4.5.1 Gridview-Steuerelement mit einer Schaltfläche Bearbeiten und Löschen-Button. Sie sind wie folgt definiert:

<asp:CommandField ShowEditButton="true" UpdateText="Save" ShowDeleteButton="false" ValidationGroup="vgParcelComments" /> 
 
<asp:TemplateField> 
 
    <ItemTemplate> 
 
    <asp:LinkButton ID="btnDeleteParcelComment" runat="server" OnClientClick="return confirm('Are you sure that you want to delete this comment?');" CommandName="Delete" CssClass="removeParcelComment">Delete</asp:LinkButton> 
 
    </ItemTemplate> 
 
</asp:TemplateField>

Im RowDataBound Ereignisse für diesen Gridview in meinem Code-Behind-Seite, kann ich auf die Schaltfläche Löschen mit der folgenden Codezeile manipulieren:

e.Row.FindControl("btnDeleteParcelComment").Visible = False 'The delete button

Dies verbirgt die Schaltfläche Löschen. Aber für die Schaltfläche Bearbeiten kann ich nicht bestimmen, wie seine ID ist, daher kann ich die FindControl-Funktion nicht verwenden, um darauf zuzugreifen. Das Beste, was ich tun kann, ist es durch den Index verweisen, etwa so:

Dim itsId As String = e.Row.Cells(4).ID

aber nichts war:

e.Row.Cells(4).Visible = False 'The edit button

ich auf der Schaltfläche Bearbeiten der ID mit folgenden Anweisung zu suchen versucht immer zurückgegeben, wenn diese Zeile ausgeführt wurde.

Tak.

Antwort

2

Sie können für die Linkbutton in der Controls-Auflistung der Zelle betrachten, die Edit als CommandName hat:

Dim editButton As LinkButton = Nothing 
For Each cell As DataControlFieldCell In e.Row.Cells 
    For Each ctl As Control In cell.Controls 
     If TypeOf ctl Is LinkButton Then 
      Dim commandButton As LinkButton = CType(ctl, LinkButton) 
      If commandButton.CommandName = "Edit" Then 
       editButton = commandButton 
       Exit For 
      End If 
     End If 
    Next 
Next 
+0

Tak, @ConnorsFan. Ich hatte ein paar Probleme mit Ihrem Code oben. Der Typ des in der Variablen ctl zurückgegebenen Objekts war zunächst ein DataControlLinkButton. Ich konnte diesen Typ nicht in einen Button umwandeln. Daher konnte ich die CommandName-Eigenschaft nicht untersuchen. Basierend auf der Inspiration dieses Codebeispiels habe ich jedoch eine Weile damit herumgespielt und kam schließlich auf diese Idee, die ich verwenden werde: –

+0

'Dim editButton As LinkButton = Nothing; Für i As Integer = 0 Zu e.Row.Controls.Count - 1; Dim-Zelle als DataControlFieldCell = e.Row.Cells (i); Wenn TypeOf cell.ContainingField ist CommandField Then; Für jedes Element in cell.Controls; Wenn TypeOf Element ist LinkButton Then; editButton = CType (Element, LinkButton); Wenn editButton.Text = "Bearbeiten" Dann; Ausfahrt für; Ende If; Ende If; Nächste; Ausfahrt für; Ende If; Nächste; Wenn editButton IsNot Nothing Then; editButton.Visible = False 'Die Bearbeitungsschaltfläche; Ende If; ' –

Verwandte Themen