IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[C# 3.5] Creation dynamique <table>, <thead>, <tbody>, <tfoot>


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 135
    Par défaut [C# 3.5] Creation dynamique <table>, <thead>, <tbody>, <tfoot>
    Bonjour,

    Je cherche à creer une methode qui me permetterai de générer un 'Table' dont le rendu HTML serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <table>
      <thead>
        <td class="left"></td>
        <td class="middle">Caption</td>
        <td class="right"></td>
      </thead>
      <tbody>
        <td class="left"></td>
        <td class="middle">Content</td>
        <td class="right"></td>
      </tbody>
      <tfoot>
        <td class="left"></td>
        <td class="middle"></td>
        <td class="right"></td>
      </tfoot>
    </table>
    J'ai essayé avec l'objet ASP:Table, en utilisant les TableHeaderRow, TableRow, et TableFooterRow, mais les balises <thead>, <tbody> et <tfoot> ne sont pas générées.
    prototype de la methode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Table BuildTable(String caption) {}

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2003
    Messages : 127
    Par défaut
    j'ai surchargé la GridView :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
     
    /// <summary>
    	/// Summary description for CustomGridView
    	/// </summary>
    	public class CustomGridView : GridView
    	{
    		#region Attibutes
     
    		private IEnumerable _realDataSource;
     
    		/// <summary>
    		/// Number of page
    		/// </summary>
    		public int CountPage
    		{
    			get
    			{
    				return (int)ViewState[this.ClientID + "CountPage"];
    			}
    			set
    			{
    				ViewState[this.ClientID + "CountPage"] = value;
    			}
    		}
     
    		/// <summary>
    		/// index of current page
    		/// </summary>
    		public int IndexPage
    		{
    			get
    			{
    				if (ViewState[this.ClientID + "IndexPage"] == null)
    				{
    					ViewState[this.ClientID + "IndexPage"] = 1;
    					return 1;
    				}
    				else
    				{
    					return (int)ViewState[this.ClientID + "IndexPage"];
    				}
    			}
    			set
    			{
    				ViewState[this.ClientID + "IndexPage"] = value;
    			}
    		}
     
    		/// <summary>
    		/// the Datasource without sort and filter
    		/// </summary>
    		protected IEnumerable RealDataSource
    		{
    			get
    			{
    				if (_realDataSource == null)
    				{
    					_realDataSource = (IEnumerable)this.DataSource;
    				}
    				return _realDataSource;
    			}
    			set
    			{
    				_realDataSource = value;
    			}
    		}
    		#endregion Attributes
     
    		public CustomGridView()
    		{
     
    			this.UseAccessibleHeader = true;
    			this.ShowFooter = true;
    			this.ShowHeader = true;
    			this.Caption = string.IsNullOrEmpty(this.Caption) ? this.Attributes["summary"] : this.Caption;
    			this.RowCreated += new GridViewRowEventHandler(CustomGridView_RowCreated);
    			this.Sorting += new GridViewSortEventHandler(CustomGridView_Sorting);
    			this.DataBinding += new EventHandler(CustomGridView_DataBinding);
    		}
     
    		#region Events
    		void CustomGridView_DataBinding(object sender, EventArgs e)
    		{
    			this.CountPage = this.RealDataSource.AsQueryable().Count() / this.PageSize;
    			if (this.RealDataSource.AsQueryable().Count() % this.PageSize > 0)
    			{
    				this.CountPage++;
    			}
    			this.DataSource = ChangeSource();
    			this.DataSource = ((IEnumerable)this.DataSource).AsQueryable().Skip(this.PageSize * (this.IndexPage - 1)).Take(this.PageSize);
    		}
     
    		void CustomGridView_Sorting(object sender, GridViewSortEventArgs e)
    		{
    			ViewState[this.ClientID + "SortDirection"] = ViewState[this.ClientID + "SortDirection"] != null ? ViewState[this.ClientID + "SortDirection"].ToString() == "Descending" ? SortDirection.Ascending : SortDirection.Descending : SortDirection.Ascending;
    			ViewState[this.ClientID + "SortExpression"] = e.SortExpression;
     
    			if (e.SortDirection == SortDirection.Ascending)
    			{
    				e.SortDirection = SortDirection.Descending;
    			}
    			else
    			{
    				e.SortDirection = SortDirection.Ascending;
    			}
     
    			this.DataSource = ChangeSource();
    			this.CountPage = this.RealDataSource.AsQueryable().Count() / this.PageSize;
    			this.DataBind();
    		}
     
    		void CustomGridView_RowCreated(object sender, GridViewRowEventArgs e)
    		{
    			if (!string.IsNullOrEmpty(this.Parent.Page.Request.Params["__EVENTTARGET"]))
    			{
    				if (this.Parent.Page.Request.Params["__EVENTTARGET"] == this.ClientID)
    				{
    					if (!string.IsNullOrEmpty(this.Parent.Page.Request.Params["__EVENTARGUMENT"]))
    					{
    						if (this.Parent.Page.Request.Params["__EVENTARGUMENT"].Contains("Page$"))
    						{
    							this.IndexPage = int.Parse(this.Parent.Page.Request.Params["__EVENTARGUMENT"].Replace("Page$", ""));
    						}
    					}
    				}
    			}
     
    			if (e.Row.RowType == DataControlRowType.Footer)
    			{
    				int colSpan = e.Row.Cells.Count;
    				for (int i = (e.Row.Cells.Count - 1); i >= 1; i -= 1)
    				{
    					e.Row.Cells.RemoveAt(i);
    					e.Row.Cells[0].ColumnSpan = colSpan;
    				}
    				string txt = "Page " + (this.IndexPage).ToString() + "/" + (this.CountPage).ToString();
    				for (int i = 0; i < this.CountPage; i++)
    				{
    					txt += "<a onclick=\"javascript:__doPostBack('" + this.ClientID + "','Page$" + (i + 1).ToString() + "');return false;\" href=\"Default.aspx?Page=" + (i + 1).ToString() +"\">" + (i + 1).ToString() + "</a>";
    				}
    				LiteralControl Foot = new LiteralControl(txt);
    				e.Row.Cells[0].Controls.Add(Foot);
    				e.Row.TableSection = TableRowSection.TableFooter;
    			}
    			else if (e.Row.RowType == DataControlRowType.Header)
    			{
    				e.Row.TableSection = TableRowSection.TableHeader;
    			}
    		}
    		#endregion Events
     
    		#region Functions
    		private IQueryable ChangeSource()
    		{
    			SortDirection SD = ViewState[this.ClientID + "SortDirection"] != null ? ViewState[this.ClientID + "SortDirection"].ToString() == "Descending" ? SortDirection.Descending : SortDirection.Ascending : SortDirection.Ascending;
    			string SE = ViewState[this.ClientID + "SortExpression"] != null ? ViewState[this.ClientID + "SortExpression"].ToString() : "Numerics";
     
    			ViewState[this.ClientID + "SortDirection"] = SD;
    			ViewState[this.ClientID + "SortExpression"] = SE;
     
    			return this.RealDataSource.AsQueryable().OrderBy(SE + " " + SD.ToString());
    		}
    		#endregion Functions
    	}
    ça gère la pagination et le sort !

    par contre maintenant pour compatible W3C il faut inverser le TFOOT et TBODY !

    si tu fais pas de pagination :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MyGridView.UseAccessibleHeader = true;
    MyGridView.ShowFooter = true;
    MyGridView.ShowHeader = true;
    MyGridView.HeaderRow.TableSection = TableRowSection.TableHeader;
    MyGridView.FooterRow.TableSection = TableRowSection.TableFooter;
    ça suffira.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 135
    Par défaut
    Bonjour,

    Je te remercie pour ta reponse, cependant, je dispose d'une methode qui construit un tableau, je voudrais juste l'adapter un peu, sans changer le type de retour.

    Il me faut donc rester soit avec la solution actuel, soit modifier l'objet ASP:Table de retour de la methode.

  4. #4
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    En c# tu as toute une gamme d'objets qui te permettent de manipuler les asp:Table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          Table tb = new Table(); //instanciation d'une nouvelle table, utilisation d'une table déjà existante possible
          TableHeaderCell thc = new TableHeaderCell(); //TableHeaderCell
          TableFooterRow tfr = new TableFooterRow(); //TableHeaderRow
          TableCell tc = new TableCell(); //TableCell
          TableRow tr = new TableRow(); //TableRow
     
          tr.Controls.Add(tc); //ajout d'une cellule à la ligne
          tb.Controls.Add(tr); //ajout de la ligne au tableau
    c'est quelques lignes te donnent des exemples ainsi que la façon d'insérer les nouveaux éléments dans tes Cells/Row/Table ou autres Header/Footer. Si tu as plus de question n'hésite pas à en demander.
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 135
    Par défaut
    Merci Lyche,

    J'avais déjà utilisé ces objets, mes le code généré, ne dispose pas des balise <thead>, <tbody>, <tfoot>.

    J'ai réglé mon probleme autrement, mais je ne sais toujours pas comment générer c'est balise avec le ASP:TABLE, peut être ce n'est pas possible.

  6. #6
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    Tu ne peux construire une <asp:table> que de cette façon malheureusement..
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

Discussions similaires

  1. creation d'une table dynamiquement
    Par Vanessa48 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 26/10/2011, 15h35
  2. [AC-2000] creation dynamique d'une table liée
    Par cgodefrw dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/05/2009, 13h36
  3. [ASE 12.5.3][TSQL] - Creation d'une table temporaire en dynamique
    Par CVince dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 16/06/2006, 15h30
  4. Réponses: 4
    Dernier message: 16/06/2006, 15h30
  5. [NEXUS][D7]Creation dynamique table et évenement
    Par PhD13 dans le forum Bases de données
    Réponses: 1
    Dernier message: 03/11/2005, 18h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo