procedure TWebForm1.MonDatagrid_PreRender(sender: System.Object; e: System.EventArgs);
var matextbox : TextBox ;
beginif MonDatagrid.EditItemIndex > -1 thenbegin
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 ;
En effet, beaucoup d'entre nous l'ont remarqué, lorsque le datagrid a sa propriété AutoGenerateColumns à "true" le code :
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 :
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 !!!
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.
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 :
{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
Pour plus d'informations sur les formats personnalisés d'affichage de DateTime voir le site MSDN
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 ?"