Comment utiliser un datatable avec un datagrid

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

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.