Developpez.com

Télécharger gratuitement le magazine des développeurs, le bimestriel des développeurs avec une sélection des meilleurs tutoriels

FAQ ASP.NET / Delphi.NETConsultez toutes les FAQ

Nombre d'auteurs : 15, nombre de questions : 90, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireLes datagrids

Voici un petit exemple de code :

Dans la page .aspx :

 
Sélectionnez

					<asp:DataGrid id="MonDatagrid" runat="server" AutoGenerateColumns="False">
					<Columns>
					<asp:TemplateColumn HeaderText="Colonne1">
					<ItemTemplate>
					<%#Container.DataItem("nomdemacolonne")%>
					</ItemTemplate>
					<EditItemTemplate>
					<asp:Textbox runat="server" width="600" maxlength="600"/>
					</EditItemTemplate>
					</asp:TemplateColumn>
				

dans le code-behind

 
Sélectionnez

					procedure TWebForm1.MonDatagrid_PreRender(sender: System.Object; e: System.EventArgs);
					var matextbox : TextBox ;
					begin
					if MonDatagrid.EditItemIndex > -1 then
					begin
					matextbox := MonDatagrid.Items[MonDatagrid.EditItemIndex].Cells[0].Controls[0] as TextBox ;
					matextbox.Width := System.Web.UI.WebControls.Unit.Parse('4cm') ;
					// Unit etant un mot clé dans Delphi, on met sa hierarchie devant
					// on peut biensur changer d'autre propriétées de la textbox d'édition des données ;-)
					end ;
					end ;
				
Créé le 28 novembre 2004  par neo.51, bodbod

Dans cette exemple on va mettre un fond rouge à toutes les cellules de la 4ème ligne de "Mondatagrid", sachant qu'il comporte 4 colonnes :

 
Sélectionnez

					procedure TWebForm1.Mondatagrid_ItemDataBound(sender: System.Object; e: System.Web.UI.WebControls.DataGridItemEventArgs);
					begin
					if not e.Item.ItemIndex = -1 then
					begin
					if e.Item.ItemIndex = 4 then
					begin
					e.Item.Cells[0].BackColor := System.Drawing.Color.Red ;
					e.Item.Cells[1].BackColor := System.Drawing.Color.Red ;
					e.Item.Cells[2].BackColor := System.Drawing.Color.Red ;
					e.Item.Cells[3].BackColor := System.Drawing.Color.Red ;
					end ;
					end ;
					end ;
				
Créé le 28 novembre 2004  par neo.51, bodbod

En effet, beaucoup d'entre nous l'ont remarqué, lorsque le datagrid a sa propriété AutoGenerateColumns à "true" le code :

 
Sélectionnez
Mondatagrid.columns[1].visible := False ;

NE MARCHE PAS En effet ce code ne marche que si votre datagrid est fait à base de templates columns. Il existe cependant une astuce : dans la page aspx :

 
Sélectionnez

					<asp:DataGrid id="Mondatagrid" runat="server" AutoGenerateColumns="True"
					OnItemDataBound="Mondatagrid_OnItemDataBound"/>
				

dans le code-behind

 
Sélectionnez

					procedure TWebForm1.Mondatagrid_ItemDataBound(sender: System.Object; e: System.Web.UI.WebControls.DataGridItemEventArgs);
					begin
					e.Item.Cells[1].Visible := False ;
					end ;
				
Créé le 28 novembre 2004  par neo.51, bodbod

Cette question va paraître simpliste pour certain, mais en parcourrant notre forum je me suis aperçu qu'on avait été pas mal à se prendre là tête la dessus. Quand on utilise un datagrid avec l'option AutoGenerateColumns="true" on a la hauteur du datagrid qui s'ajuste automatiquement en fonction du nombre de ligne qu'affiche la page.

Par contre, si on décide de spécifier manuellement les colonnes, et donc qu'on met AutoGenerateColumns="false", ce n'est plus la hauteur du datagrid qui s'adapte en fonction du nombre de lignes à afficher mais la hauteurs de lignes qui varie. On peut ainsi se retrouver avec 2 lignes qui prennent toute la largeur du datagrid qui affiche normalement 10 lignes.

La solution à ce problème est ultra simple (encore fallait-il trouver) il suffit juste de ne pas préciser la hauteur (height) du datagrid !!!

Créé le 12 octobre 2003  par neo.51

Dans cet exemple nous allons ajouter une colonne de boutons : Dans le code de la page aspx :

 
Sélectionnez

					<Columns>
					<asp:TemplateColumn>
					<HeaderStyle Width="600px"></HeaderStyle>
					<ItemTemplate>
					<asp:Button id="Button1" runat="server" Text="NotreBouton"></asp:Button>
					</ItemTemplate>
					</asp:TemplateColumn>
					<Columns>
				

Dans le <itemTemplate> on peut mettre n'importe quel webcontrol. Il y a aussi la balise <EditItemTemplate> dans laquelle on met le webcontrol affiché quand la cellule où se trouve le <iItemTemplate> est en mode édition.

Si vous possédez Visual Studio, il y a encore plus simple : Allez dans le property builder du datagrid => Columns, et changez une boundsColumns en template columns à l'aide d'un lien en bas de la fenêtre. Ensuite du sortez du property builder, faites un click droit sur le datagrid => édit template. Et la vous pouvez éditer la template column avec l'IDE en faisant du Drag & Drop.

Créé le 12 octobre 2003  par neo.51

Chaque colonne d'un datagrid à une propriété DataFormatString. Pour n'afficher que l'heure d'un champ DateTime la chaîne de caractères à mettre pour la propriété DataFormatString est :


Pour plus d'informations sur les formats personnalisés d'affichage de DateTime voir le site MSDN

  • {0:HH:mm} : pour afficher les heures (de 0 à 24) et les minutes
  • {0:hh:mm} : pour afficher les heures (de 1 à 12) et le minutes
  • {0:HH:mm:s} : pour afficher les heures (de 0 à 24), les minutes et les secondes
Créé le 18 février 2004  par neo.51

Lien : Custom DateTime Format Strings
Lien : Comment formater une date pour l'affichage ?

Le principe est le même pour lier un Datagrid à une Css que pour lier un Calendar à une Css : il faut lier chaque style définissant l'aspect du webcontrol à une classe Css. Pour éviter la redondance d'informations sur cette FAQ je vous renvoie à la question : "Comment lier une Css à un Calendar ?"

Créé le 18 février 2004  par neo.51

Lien : Comment lier un Calendar à une Css ?

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.