-
ASP.NET Zugriff auf ItemTemplate Inhalte
7. Januar 2009 Andi 1
C# und ASP.NET sind zwei schöne Sachen, die einem so manche nervigen Programmier-Alltäglichkeiten bei der Web-/Softwareentwicklung abnehmen. Allerdings stößt man oft auf Fälle, wo einfachste Dinge doch komplizierter sind als man denkt. Ein Punkt ist z.B. folgende Situation:
Man hat ein GridView mit einigen BoundFiled Elementen, eine SqlDataSource und die netten erzeugten Update und Delete Funktionen des GridView. Soweit geht noch alles.
Möchte man nun aber ein selbst erstelltes ItemTemplate verwenden, versagt die Automatik und man wundert sich, dass das Updaten der Zeile nicht mehr klappt. Nach langem probieren und googeln hab ich dafür eine Lösung gefunden. Um Zugriff auf Elemente innerhalb einer GridView-Zelle zu bekommen würde man sowas machen:
TextBox txtName = (TextBox)GridView1.Rows[e.RowIndex].Cells[0].FindControl("Id des verwendeten Controls");
Jetzt könnte man das ganze mit vielen Zeilen C# Code manuell in die DB eintragen – oder sonst was damit tun. Viel schöner fände ich es aber, einfach weiter das SqlDataSource Control alles machen zu lassen. Um nun diese Info in das UPDATE SQL Statement zu bringen, fügen wir es einfach der SqlDataSource hinzu, etwa so:
SqlDataSource1.UpdateParameters.Add("Name",txtName.Text); SqlDataSource1.UpdateParameters["Name"].DefaultValue = txtName.Text;
Das DefaultValue setze ich zusätzlich, damit auch wirklich Daten drin sind – könnte man vlt auch weg lassen. Wichtig noch, bei den evtl automatisch von VisualStudio erzeugten <UpdateParameters>(…)</UpdateParameters> den Parameter wieder zu entfernen, hier also Name.
Damit hat die SqlDataSource wieder alle Daten und kann die Werte wieder korrekt in die DB speichern. Das „ganze“ Beispiel sähe dann so aus:
<asp:GridView ID="GridView1" runat="server" OnRowUpdating="UpdateRow" (..) ></asp:GridView> protected void UpdateRow(object sender, GridViewUpdateEventArgs e) { TextBox txtName = (TextBox)GridView1.Rows[e.RowIndex].Cells[0].FindControl("NameNew"); SqlDataSource1.UpdateParameters.Add("Name",txtName.Text); SqlDataSource1.UpdateParameters["Name"].DefaultValue = txtName.Text; }
Categories: Coding
Schlagwörter: asp, c#, gridview, itemtemplate, SqlDataSource
…zu wenig Kaffee heute! Hollywood ruft!
One thought on “ASP.NET Zugriff auf ItemTemplate Inhalte”
Schreibe einen Kommentar
Na alles klar – jetzt verstehe ich alles! 😉
Ist das das, woran du am Sonntag so lang getüftelt hast?
Wollte grad nen Jogurt essen, musste aber feststellen, dass er eingefroren ist, weil unser Kühlschrank zu kalt ist 🙁