Wie binden Sie eine DropDownList in einer GridView im EditItemTemplate Feld?
Hier ist mein code in einem gridview gebunden Laufzeit:
...
<asp:templatefield>
<edititemtemplate>
<asp:dropdownlist runat="server" id="ddgvOpp" />
</edititemtemplate>
<itemtemplate>
<%# Eval("opponent.name") %>
</itemtemplate>
</asp:templatefield>
...
Ich soll binden die dropdownlist "ddgvOpp" aber ich weiß nicht, wie. Ich sollte, ich aber nicht. Hier ist, was ich habe, aber ich bekomme immer ein "Object reference" - Fehler, die Sinn macht:
protected void gvResults_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow) //skip header row
{
DropDownList ddOpp = (DropDownList)e.Row.Cells[5].FindControl("ddgvOpp");
BindOpponentDD(ddOpp);
}
}
Wo BindOpponentDD()
ist nur, wo die DropDownList wird aufgefüllt. Bin ich nicht, dies zu tun in der richtigen Veranstaltung? Wenn nicht, was brauche ich um es in?
Vielen Dank im Voraus...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich denke, ich bin einfach nur dumm. Ich fand es heraus.
In der RowDataBound-Ereignis, fügen Sie einfach die folgende Bedingung:
if(e.RowState && DataControlRowState.Edit) > 0 {}
Dank Saurabh Tripathi,
Die Lösung, die Sie zur Verfügung gestellt für mich gearbeitet.
In gridView_RowDataBound () - Ereignis verwenden.
Wenn jemand fest mit dem gleichen Problem, dann versuchen Sie diese heraus.
Cheers.
Ich hatte das gleiche Problem, aber dieses Update (Jason, was ist das hinzufügen der Vorbehaltsware zum handler) hat bei mir nicht funktioniert; dem Bearbeiten-Reihe noch nie war Datenbindung, so dass die Bedingung nie wahr ausgewertet. RowDataBound war einfach nie mit der gleichen RowIndex, wie das GridView.EditIndex. Mein setup ist ein wenig anders, aber in, dass anstelle der Bindung der dropdown-programmgesteuert ich habe es an eine ObjectDataSource auf der Seite. Die dropdown-noch gebunden werden separat pro Zeile, obwohl, weil Ihre möglichen Werte sind abhängig von weiteren Informationen in der Zeile. Also das ObjectDataSource-hat eine SessionParameter, und ich stellen Sie sicher, dass die entsprechende session-variable, wenn erforderlich, für die Bindung.
Ist und das dropdown in der entsprechenden Zeile:
Was ich am Ende dabei war, nicht mit einem CommandField in der GridView erzeugen meine Bearbeiten, löschen, aktualisieren und Abbrechen buttons; ich habe es auf meinem eigenen mit ein TemplateField, und durch die Einstellung der CommandNames angemessen, ich war in der Lage, Auslöser der eingebauten Bearbeiten/löschen/aktualisieren/Abbrechen von Aktionen auf das GridView. Für die Bearbeiten-Schaltfläche, die ich aus dem CommandArgument die Informationen, die ich brauchte zum binden der dropdown-Liste auswählen, anstatt die Zeile, die die PK wie wäre es in der Regel sein. Diese zum Glück nicht verhindern, dass die GridView aus dem editieren der entsprechenden Zeile.
Und in der RowCommand handler:
Den RowCommand, natürlich, passiert, bevor die Zeile in den Bearbeitungsmodus wechselt und somit vor den dropdown-databinds. So alles funktioniert. Es ist ein bisschen ein hack, aber ich verbrachte genug Zeit, um herauszufinden, warum die Zeile Bearbeiten nicht datengebundene schon.
Versuchen, diese
Dies wird helfen, u
Dieser code wird tun, was Sie wollen: