CREER ET PEUPLER UN USERCONTROL DÉRIVANT DE DATAGRID

cs_Domilo Messages postés 32 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 22 février 2005 - 3 févr. 2004 à 09:20
aspirine75 Messages postés 2 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 6 septembre 2004 - 31 août 2004 à 10:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/19810-creer-et-peupler-un-usercontrol-derivant-de-datagrid

aspirine75 Messages postés 2 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 6 septembre 2004
31 août 2004 à 10:56
Bonjour :o)
J'ai complété ton code afin d'en faire une DataGrid un peu plus complet et j'ai porté le tout en C#.
Néanmoins, j'ai un problème au niveau de la pagination.
Les numéros sont bien affichés mais le code permettant la mise en place des liens hypertextes n'est pas ajouté convenablement :o'(
Si quelqun trouve une solution à mon problème :o)

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;

namespace MonNameSpace.WebControls
{
/// <summary>
/// Description résumée de CustomDataGrid.
/// </summary>
[DefaultProperty("ViewName"),ToolboxData("<{0}:CustomDataGrid runat=server></{0}:CustomDataGrid>")]
public class CustomDataGrid : System.Web.UI.WebControls.DataGrid
{
public DataGrid CustomGrid;
private string _viewName;
private int _pageSize;
private string _cnx = "Ma_Chaine_De_Connexion";
private DataSet _ds;

#region Accessors
/// <summary>
/// Définition du nom de la vue utilisée pour récupérer les données
/// </summary>
[Bindable(true),Category("PERSO"),DefaultValue(""),Browsable(true),Description("Nom de la vue à utiliser.")]
public string ViewName
{
get
{
return this._viewName;
}
set
{
this._viewName = value;
}
}

[Bindable(true),Category("PERSO"),DefaultValue("25"),Browsable(true),Description("Nombre d'enregistrements par page.")]
public override int PageSize
{
get
{
return this._pageSize;
}
set
{
this._pageSize = value;
}
}
[Bindable(true),Category("PERSO"),DefaultValue("true"),Browsable(true),Description("Autorise la pagination.")]
public override bool AllowPaging
{
get
{
return base.AllowPaging;
}
set
{
base.AllowPaging = value;
}
}

[Bindable(true),Category("PERSO"),DefaultValue("false"),Browsable(false),Description("Autorise la pagination personnalisée.")]
public override bool AllowCustomPaging
{
get
{
return base.AllowCustomPaging;
}
set
{
base.AllowCustomPaging = value;
}
}
#endregion

#region Surcharges
protected override void RenderContents(HtmlTextWriter writer)
{
if(this.ViewName.Length < 0)
writer.Write("Nom de la vue non spécifié !");
else
{

string strQuery = "SELECT * FROM "+this.ViewName;

DataGrid CustomGrid = new DataGrid();

//Gestion de la pagination
CustomGrid.PageSize = this.PageSize;
CustomGrid.AllowPaging = this.AllowPaging;
CustomGrid.PagerStyle.Mode = PagerMode.NumericPages;
CustomGrid.PagerStyle.HorizontalAlign = HorizontalAlign.Center;
// Récupération des informations dans la base
SqlDataAdapter oDa = new SqlDataAdapter(strQuery, this._cnx);
this._ds = new DataSet();
oDa.Fill(this._ds);

// Remplissage de la grille avec les informations
CustomGrid.DataSource = this._ds;
CustomGrid.DataBind();

CustomGrid.RenderControl(writer);
CustomGrid.Dispose();
}
}

protected override void Render(HtmlTextWriter writer)
{
base.Render (writer);
}
#endregion
}
}
cs_hamet Messages postés 7 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 17 février 2005
12 mars 2004 à 12:39
Bonjour
Quand je fais un copier/coller de ton script cela ne marche pas. J'ai une erreur il me dit qu'il ne trouve pas l'assembly. Peux-tu m'expliquer l'intéret du code également j'ai pas bien compris.
Merci
cs_Domilo Messages postés 32 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 22 février 2005
3 févr. 2004 à 09:20
Bonjour,

Super, ton idée m'aide à démarrer mes premiers tests...

En changeant quelques paramètres de ta première version, je l'ai simplifiée en :

Public Class GetLogicalDrives2
Inherits System.Web.UI.WebControls.DataGrid
Sub New()
MyBase.New()
Me.EnableViewState = False ' Economise les transactions client/serveur
Me.DataSource = Directory.GetLogicalDrives
Me.DataBind()
End Sub
End Class

Toujours sur cette première partie, j'ai fait un test sur le RenderContents, qui devrait éclaircir son utilisation :

Protected Overrides Sub RenderContents(ByVal writer As System.Web.UI.HtmlTextWriter)
MyBase.RenderContents(writer) ' Appelle la fonction d'origine assurant le travail
writer.RenderBeginTag(HtmlTextWriterTag.Label)
writer.Write("Message dans un label après la grid.")
writer.RenderEndTag()
End Sub

A +
Dom.
Rejoignez-nous