Comment utiliser un datatable avec un datagrid

Soyez le premier à donner votre avis sur cette source.

Snippet vu 21 964 fois - Téléchargée 37 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
Messages postés
62
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
3 juillet 2009

Merci tu m'as sauvé la vie :D
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

merci pour ces informations :)
Messages postés
1765
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
5
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.