Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMMENT UTILISER UN DATATABLE AVEC UN DATAGRID


Information sur la source

Catégorie :ASP.Net Source .NET ( DotNet ) Niveau : Débutant Date de création : 20/08/2003 Date de mise à jour : 20/08/2003 11:10:21 Vu : 14 613

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

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

  • // 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="&lt;B&gt;Nom&lt;/B&gt;">
  • <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="&lt;B&gt;Adresse&lt;/B&gt;">
  • <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();
  • }
  • }
// 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="&lt;B&gt;Nom&lt;/B&gt;">
			<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="&lt;B&gt;Adresse&lt;/B&gt;">
			<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

^
 

Commentaires et avis

signaler à un administrateur
Commentaire de fabrice69 le 21/08/2003 04:03:56 administrateur CS

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___

signaler à un administrateur
Commentaire de BlackGoddess le 21/08/2003 11:26:31

merci pour ces informations :)

signaler à un administrateur
Commentaire de Tofetlui le 22/03/2006 17:18:43

Merci tu m'as sauvé la vie :D

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.