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 :

Telerik - Fusion de colonnes avec RadGridView


Sujet :

ASP.NET

  1. #1
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut Telerik - Fusion de colonnes avec RadGridView
    Hello,

    Sur une application web ASP.net, je dois faire (faire) une évolution assez simple d'un composant web; il s'agit de fusionner des cellules selon certaines règles métier.
    Les développeurs m'ont remonté le fait qu'il était impossible de le faire du fait de l'utilisation du composant RadGridView de Telerik.
    Surpris, j'ai testé moi-même, et en effet ça ne fonctionne pas pour les colonnes, mais ça fonctionne pour les lignes, en tout cas "nativement".

    Avant d'envisager un retour arrière sur l'utilisation de Telerik dans le composant (car il y a quand même une valeur ajoutée malgré cela...), j'aimerai m'assurer que c'est bien une impasse.

    Pour info, sur le forum de Telerik je lis ceci :
    Citation Envoyé par Telerik
    This functionality is currently not supported by our RadGridView. We will consider it in our future development plans if more customers ask for it.
    Mais puisque ça marche pour les lignes, je me dis qu'une fourberie existe peut-être pour contourner le problème.

    Voici le code (assez basique) que j'ai utilisé pour reproduire le cas :

    Code c# : 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
     
    void RadGrid1_DataBound(object sender, EventArgs e)
    {
    	try
    	{
    		// Merge horizontally
    		for (int rowIndex = RadGrid1.Items.Count - 2; rowIndex >= 0; rowIndex--)
    		{
    			GridDataItem gvRow = RadGrid1.Items[rowIndex];
    			GridDataItem gvPreviousRow = RadGrid1.Items[rowIndex + 1];
    			for (int cellCount = 0; cellCount < gvRow.Cells.Count; cellCount++)
    			{
    				if (gvRow.Cells[cellCount].Text == gvPreviousRow.Cells[cellCount].Text)
    				{
    					if (gvPreviousRow.Cells[cellCount].RowSpan < 2)
    					{
    						gvRow.Cells[cellCount].RowSpan = 2;
    					}
    					else
    					{
                                                    // Fonctionne
    						gvRow.Cells[cellCount].RowSpan = gvPreviousRow.Cells[cellCount].RowSpan + 1;
    					}
    					gvPreviousRow.Cells[cellCount].Visible = false;
    				}
    			}
    		}
    		// Merge vertically
    		foreach (GridDataItem row in RadGrid1.Items)
    		{
    			TableCell previousCell = null;
    			for (int cellCount = 0; cellCount < row.Cells.Count; cellCount++)
    			{
    				if (previousCell == null)
    				{
    					previousCell = row.Cells[cellCount];
    				}
    				else
    				{
    					if (row.Cells[cellCount].Text.Equals(previousCell.Text))
    					{
                                                    // Ne fonctionne pas !!!
    						previousCell.ColumnSpan++;
    						//row.Cells[cellCount].Visible = false;
    					}
    				}
    				previousCell = row.Cells[cellCount];
    			}
    		}
    	}
    	catch (Exception) { }
    }

    Je précise, au cas où, que ce code fonctionne bien avec un composant ASP.net GriedView.

    Merci d'avance !
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  2. #2
    Membre actif Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Points : 284
    Points
    284
    Par défaut
    Je ne sais pas si c'est ce que tu cherche !! regarde ce lien

  3. #3
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    J'ai continué de bosser sur le truc et j'ai trouvé une parade... en fait ça revient à faire plus ou moins ce que ça fait sur ton lien (donc merci même si je ne m'en suis pas servi au final ! xD)

    Code c# : 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
     
    // Merge vertically
    foreach (GridDataItem row in RadGrid1.Items)
    {
    	TableCell previousCell = null;
    	for (int cellCount = 0; cellCount < row.Cells.Count; cellCount++)
    	{
    		if (previousCell == null)
    		{
    			previousCell = row.Cells[cellCount];
    		}
    		else
    		{
    			if (row.Cells[cellCount].Text.Equals(previousCell.Text))
    			{
    				if(previousCell.ColumnSpan <2) {
    					previousCell.ColumnSpan = 2;
    				}
    				row.Cells[cellCount].Visible = false;
    				previousCell.HorizontalAlign = HorizontalAlign.Center;
    			}
    		}
    		previousCell = row.Cells[cellCount];
    	}
    }

    En fait, ce n'est pas que le merge ne marche pas, mais qu'il est mal "affiché" dans le composant. En effet, avec un merge standard, le composant GridView va mettre l'alignement qui va bien, avec RadGrid ce comportement n'est pas automatique.
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/06/2015, 14h48
  2. Fusion de colonne avec Talend
    Par novadga dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 01/07/2013, 12h39
  3. [XL-2007] Copie de colonnes avec fusion
    Par eric53000 dans le forum Excel
    Réponses: 14
    Dernier message: 23/12/2011, 03h16
  4. Réponses: 1
    Dernier message: 16/03/2010, 09h28
  5. maj d'1 colonne avec la date du jour lors de l'INSERT
    Par Celina dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/12/2003, 15h03

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