DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Christian Hehtke Artikel Drucken
        
GridView - Controls in EmptyDataTemplate to insert data

Ich hatte die Woche viel mit dem GridView Control zu tun, dabei stand ich dann vor dem Problem das ich Controls im EmptyDataTemplate haben wollte um halt einen ersten Datensatz anzulegen. Nachdem ich in Google und Msdn nichts gescheites gefunden habe musste eine Lösung her. Diese möchte ich euch hier näherbringen. Das komplette Beispiel befindet sich am Ende des Artikels.

Leider liessen sich diese Controls nicht so einfach finden aber ich musste ja an ihre Werte kommen.

Wenn man sich dann mal den HTML text anschaut der rauskommt wenn das EmptyDataTemplate angezeigt wird wird es schon klarer was man zu tun hat um die controls anzusprechen.

<input name="GridView1$ctl01$txtFirstName" type="text" id="GridView1_ctl01_txtFirstName" />

Es hat den Anschein das das EmptyDataTemplate die id "ctl01" hat.

Sprich wir müssen per FindControl das Control mit der id "ctl01" suchen und können dann in diesem Control nach unseren Controls suchen.

// get the emptydatatemplate as a control. its name is clt01.

Control emptydatatemplate = this.GridView1.FindControl("ctl01");

// get the 3 textbox controls.

TextBox firstname = (TextBox)emptydatatemplate.FindControl("txtFirstName");

TextBox lastname = (TextBox)emptydatatemplate.FindControl("txtLastName");

TextBox accountnr = (TextBox)emptydatatemplate.FindControl("txtAccountNr");

Da in der Überschriftinsert data steht machen wir das natürlich noch. Folgendes Beispiel geht von einer konfigurierten SqlDataSource aus und einem mit Controls gefüllten EmtpyDataTemplates, welches einen Button btnNew enthält.

void btnNew_Click(object sender, EventArgs e)

{

// exec the insert proc for your datasource.

this.CustomerSource.Insert();

}

protected void CustomerSource_Inserting(object sender, SqlDataSourceCommandEventArgs e)

{

// get the emptydatatemplate as a control. its name is clt01.

Control emptydatatemplate = this.GridView1.FindControl("ctl01");

// get the 3 textbox controls.

TextBox firstname = (TextBox)emptydatatemplate.FindControl("txtFirstName");

TextBox lastname = (TextBox)emptydatatemplate.FindControl("txtLastName");

TextBox accountnr = (TextBox)emptydatatemplate.FindControl("txtAccountNr");

// set commands parameter values ...

e.Command.Parameters["@FirstName"].Value=firstname.Text;

e.Command.Parameters["@LastName"].Value=lastname.Text;

e.Command.Parameters["@AccountNumber"].Value=Int32.Parse(accountnr.Text);

}

Dieser Code ruft auf btnNew Click die Insert Methode der SqlDataSource auf. Die benötigten Parameter werden im Inserting Eventhandler mit den Werten der Controls die sich im EmptyDataTemplate befinden gefüllt, sodass ein Reibungsfreies Insert erfolgen kann. Hier im Beispiel wird natürlich nichts validiert ihr solltet das aber tun.

Hier zum Abschluss noch einmal das komplette Beispiel:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

void btnNew_Click(object sender, EventArgs e)

{

// exec the insert proc for your datasource.

this.CustomerSource.Insert();

}

protected void CustomerSource_Inserting(object sender, SqlDataSourceCommandEventArgs e)

{

// get the emptydatatemplate as a control. its name is clt01.

Control emptydatatemplate = this.GridView1.FindControl("ctl01");

// get the 3 textbox controls.

TextBox firstname = (TextBox)emptydatatemplate.FindControl("txtFirstName");

TextBox lastname = (TextBox)emptydatatemplate.FindControl("txtLastName");

TextBox accountnr = (TextBox)emptydatatemplate.FindControl("txtAccountNr");

// set commands parameter values ...

e.Command.Parameters["@FirstName"].Value=firstname.Text;

e.Command.Parameters["@LastName"].Value=lastname.Text;

e.Command.Parameters["@AccountNumber"].Value=Int32.Parse(accountnr.Text);

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Customer list</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"

AutoGenerateColumns="False" DataKeyNames="Id" DataSourceID="CustomerSource">

<Columns>

<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowSelectButton="True" />

<asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" ReadOnly="True"

SortExpression="Id" />

<asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />

<asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />

<asp:BoundField DataField="AccountNumber" HeaderText="AccountNumber" SortExpression="AccountNumber" />

</Columns>

<EmptyDataTemplate>

<asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>

<asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>

<asp:TextBox ID="txtAccountNr" runat="server"></asp:TextBox>

<asp:Button ID="btnNew" runat="server" Text="New Customer" OnClick="btnNew_Click"/>

</EmptyDataTemplate>

</asp:GridView>

<asp:SqlDataSource ID="CustomerSource" runat="server" ConnectionString="<%$ ConnectionStrings:connstr %>"

DeleteCommand="DELETE FROM [Customers] WHERE [Id] = @Id"

InsertCommand="INSERT INTO [Customers] ([FirstName], [LastName], [AccountNumber]) VALUES (@FirstName, @LastName, @AccountNumber)"

SelectCommand="SELECT [FirstName], [Id], [LastName], [AccountNumber] FROM [Customers]"

UpdateCommand="UPDATE [Customers] SET [FirstName] = @FirstName, [LastName] = @LastName, [AccountNumber] = @AccountNumber WHERE [Id] = @Id" OnInserting="CustomerSource_Inserting">

<DeleteParameters>

<asp:Parameter Name="Id" Type="Int32" />

</DeleteParameters>

<UpdateParameters>

<asp:Parameter Name="FirstName" Type="String" />

<asp:Parameter Name="LastName" Type="String" />

<asp:Parameter Name="AccountNumber" Type="Int32" />

<asp:Parameter Name="Id" Type="Int32" />

</UpdateParameters>

<InsertParameters>

<asp:Parameter Name="FirstName" Type="String" />

<asp:Parameter Name="LastName" Type="String" />

<asp:Parameter Name="AccountNumber" Type="Int32" />

</InsertParameters>

</asp:SqlDataSource>

</div>

</form>

</body>

</html>

 

Mfg

 


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 07.05.2006
  Gültig bis: 05.08.2006
4 Ratings
Bewertung: 80,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG