2009-07-23 9 views
2

Mir fehlt hier etwas ...ASP.net Listview-Zutrittskontrollen in ItemUpdating Ereignis

ich die Werte der Kontrollen auf das Element zugreifen müssen, die editmode verlässt, so ItemUpdating feuern.

Ich habe herausgefunden, wie man den Schlüsselwert bekommt, damit ich weiß, welcher Datensatz in der Datenbank ich aktualisieren muss. Das Problem ist, dass ich scheinbar nicht auf die Werte der Steuerelemente in der Bearbeitungszeile zugreifen kann.

Das EditTemplate enthält einige Kontrollkästchen, ein Dropdown und ein Textfeld. Ich muss auf diese Werte zugreifen, damit ich den Datensatz aktualisieren kann.

Wenn man sich die Eventargs ansieht, zeigt sich nichts.

Ich denke, ich bin hier etwas Entscheidendes übersehen, jede Hilfe wäre praktisch.

+0

Können Sie Ihren ItemUpdating-Ereignishandler posten? –

+0

Welche Datenquelle verwenden Sie? Haben Sie eine ObjectDataSource, für die Sie eine Update-Methode schreiben möchten? –

Antwort

0

Es gibt zwei Möglichkeiten, ich denke, dies zu tun.

Die erste Möglichkeit besteht darin, eine Datenquelle zu verwenden, die einen Aktualisierungsbefehl unterstützt und eine Zweiwege-Bindung verwendet, um die Werte zu aktualisieren. Der folgende Abschnitt verwendet eine Zwei-Wege-Bindung, um die Felder Name und Student zu füllen, und sie werden auch für Sie aktualisiert.

<EditItemTemplate> 
      <tr style="background-color: #FFCC66;color: #000080;"> 
       <td> 
        <asp:Button ID="UpdateButton" runat="server" CommandName="Update" 
         Text="Update" /> 
        <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" 
         Text="Cancel" /> 

       </td> 
       <td> 
        <asp:TextBox ID="nameTextBox" runat="server" Text='<%# Bind("name") %>' /> 
       </td> 
       <td> 
        <asp:TextBox ID="studentTextBox" runat="server" Text='<%# Bind("student") %>' /> 
       </td> 
      </tr> 
     </EditItemTemplate> 

Wenn Sie keine Datenquelle verwenden, die dies unterstützt, können Sie eine andere Sache tun. Beachten Sie, wie die Update-Schaltfläche einen Befehl namens "Update" hat. Sie können dies verwenden, um die gewünschten Steuerwerte abzurufen, indem Sie die Listenansichten ItemCommand Event verarbeiten.

protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e) 
    { 
     if (e.CommandName == "Update") 
     { 
      TextBox box = (TextBox)e.Item.FindControl("nameTextBox"); 

      string name = box.Text; 
     } 
    } 

Sie können jede Kontrolle im editied Artikel finden, indem Sie einfach finden Steuerung aufrufen und sie der Kontrolle des ID vorbei, und vergessen Sie nicht die Besetzung.

this helps

+0

durch den ItemCommand statt ItemUpdating gehen ist in der Tat die Lösung für mich, da ich keine DataSource verwenden :) danke! –

+0

wieder öffnen ... Ich habe immer noch ein Problem, seit die Verwendung des Update-Befehls in der aspx erwartet ein ItemUpdating-Ereignis, das ich jetzt in ItemCommand fangen. Dies wirft einen Fehler auf. Wenn ich einen anderen Befehlsnamen benutze, habe ich Probleme mit dem Viewstatus, wenn ich meine Liste neu lade ... irgendwelche Ideen? –

+0

Ich denke, ich muss etwas Code sehen, bevor ich helfen kann. Der Befehlsname sollte ItemCommand nicht veranlassen, irgendwelche Fehler zu werfen. Behandeln Sie das ItemUpdating-Ereignis weiterhin? Wenn du bist, bin ich mir nicht sicher, ob du das wirklich brauchst. Ich denke, Sie können alles, was Sie getan haben, im ItemUpdating-Event im ItemCommand-Event tun. Kannst du auch informativer über dein Viewstate-Problem sein, wenn du die lis neu lädst? – cptScarlet

2

Sie auch "ListView.EditItem.FindControl (" X ")" Steuerung für den Zugriff direkt nutzen können.

Protected Sub ListView_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewUpdateEventArgs) Handles ListView.ItemUpdating 

     Dim DropDownListddl As DropDownList = ListView.EditItem.FindControl("DropDownListddl") 

     Lblwarning.Text = DropDownListddl.SelectedValue 
End Sub 
Verwandte Themen