Comment utiliser un datatable avec un datagrid

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 254 fois - Téléchargée 39 fois

Contenu du snippet

en complément de la source de F___
http://www.aspfr.com/article.aspx?ID=525

voici comment utiliser un DataTable avec un DataGrid, le DataTable etant toujours l'image des données du DataGrid.

l'exemple ci-dessous présente un DataTable (et un DataGrid) sur 2 colonnes, 'nom' et 'adresse'.

Source / Exemple :


// dans le fichier .aspx

<asp:datagrid id="dgDest" style="Z-INDEX: 107; LEFT: 32px; POSITION: absolute; TOP: 368px" runat="server" Height="244px" Width="719px" AutoGenerateColumns="False" PageSize="4" AllowPaging="True" ShowFooter="True" AllowSorting="True">
	<Columns>
		<asp:TemplateColumn HeaderText="<B>Nom</B>">
			<ItemTemplate>
				<asp:Label id=lblText runat="server" Width="289px" Height="25px" Text='<%# DataBinder.Eval(Container, "DataItem.Name") %>'></asp:Label>
			</ItemTemplate>
			<FooterTemplate>
				<asp:TextBox id="txtNewDestName" runat="server" ForeColor="#0000C0" Width="289px" Height="31px"></asp:TextBox>
			</FooterTemplate>
		</asp:TemplateColumn>
		<asp:TemplateColumn HeaderText="<B>Adresse</B>">
			<ItemTemplate>
				<asp:Label id=Label3 runat="server" Height="25px" Width="329px" Text='<%# DataBinder.Eval(Container, "DataItem.Address") %>'></asp:Label>
			</ItemTemplate>
			<FooterTemplate>
				<asp:TextBox id="txtNewDestAddress" runat="server" Height="33px" Width="329px" ForeColor="#0000C0" TextMode="MultiLine"></asp:TextBox>
			</FooterTemplate>
		</asp:TemplateColumn>
		<asp:TemplateColumn>
			<ItemTemplate>
				<asp:Button id="cmdDelete" runat="server" ForeColor="#0000C0" Width="73px" Font-Bold="True" Text="Supprimer" CommandName="Delete"></asp:Button>
			</ItemTemplate>
			<FooterTemplate>
				<asp:Button id="cmdAdd" runat="server" ForeColor="#0000C0" Width="73px" Font-Bold="True" Text="Ajouter" CommandName="Insert"></asp:Button>
			</FooterTemplate>
		</asp:TemplateColumn>
	</Columns>
	<PagerStyle Mode="NumericPages"></PagerStyle>
</asp:datagrid>

// dans le code behind

private void Page_Load(object sender, System.EventArgs e)
{
	if(!IsPostBack)
	{
		DataTable dt = new DataTable();
 
		dt.Columns.Add(new DataColumn("Name", typeof(string)));
		dt.Columns.Add(new DataColumn("Address", typeof(string)));
 
		dgDest.DataSource = new DataView(dt);
		dgDest.DataBind();

		ViewState.Add("dt", dt);
	}
}

private void dgDest_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
	dgDest.CurrentPageIndex = e.NewPageIndex;
	dgDest.DataSource = new DataView((DataTable)ViewState["dt"]);
	dgDest.DataBind();
}

private void dgDest_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
	((DataTable)ViewState["dt"]).Rows[e.Item.ItemIndex].Delete();
	dgDest.DataSource = new DataView((DataTable)ViewState["dt"]);
	dgDest.DataBind();
}

private void dgDest_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
	if(e.CommandName == "Insert")
	{
		TextBox tName = (TextBox)(e.Item.FindControl("txtNewDestName"));
		TextBox tAddr = (TextBox)(e.Item.FindControl("txtNewDestAddress"));
			
		DataRow dr;
		dr = ((DataTable)ViewState["dt"]).NewRow();
		dr[0] = tName.Text;
		dr[1] = tAddr.Text.Replace("\r\n", "<BR>");
		((DataTable)ViewState["dt"]).Rows.Add(dr);

		tName.Text = "";
		tAddr.Text = "";

		dgDest.DataSource = new DataView((DataTable)ViewState["dt"]);
		dgDest.DataBind();
	}
}

Conclusion :


N'hésitez pas a me signaler toute erreur/idée d'amélioration.

J'espère que cette source pourra servir

^

A voir également

Ajouter un commentaire Commentaires
Tofetlui Messages postés 62 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 3 juillet 2009
22 mars 2006 à 17:18
Merci tu m'as sauvé la vie :D
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
21 août 2003 à 11:26
merci pour ces informations :)
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
21 août 2003 à 04:03
Pas mal la source celle-ci permet en effet de gérer un datatable en mode visuel (datagrid) sans gestion de connexion à une base (via le ViewState).
Attention tout de même à ce même ViewState (sauvegarde de l'ensemble des éléments de la page dans un champ caché du fichier source) qui devient fort conséquent très rapidement.

A proscrire sur Internet, éviter sur Extranet (suivant le débit garanti) et peut être utilisé sur un Intranet classique.

F___

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.