Probléme de CheckBoxList

cs_Matrics Messages postés 23 Date d'inscription lundi 22 décembre 2003 Statut Membre Dernière intervention 22 avril 2005 - 18 avril 2004 à 23:43
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 20 avril 2004 à 21:29
salut tous le monde

je veus savoire est ce que le contole checkboxlist peut supporté la pagination ? si oui comment ?

merci d'avance .

4 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
19 avril 2004 à 18:41
Non, un CheckBoxList ne supporte pas la pagination :sad)

pour faire ceci tu as plusieurs solutions, soit tu derives un controles deja present pour créer un nouveau CheckBoxList qui gere la pagination soit tu fais tout ca à la main ... soit un mix des deux :-p

1er cas (celui que je ferais) derivation d'un controle.
Tu as deux possibilité soit tu derives un datagrid et tu n'as pas à te preoccuper de la pagination, soit tu derives un checkboxlist et faut s'occuper de la pagination mais en contre partie tu n'auras pas besoin de gerer tes checkbox, le choix est assez delicat, perso je sais pas lequel je prendrais, ca necessite reflexion, moi je pense que je deriverais un Datagrid car la gestion des checkbox m'a l'air plus simple que la gestion de la pagination.

2eme cas à la main :
pas tres compliqué suffit d'etre logique et de se lancer dans le code, tu auras un CheckBoxList et il faudra que tu geres la datasource, ainsi que la gestion des pages, mais il y a beaucoup de risque d'erreur, et c'est pas reutilisable dans une autre application donc bof

3eme cas le mix :
c'est en depannage. tu n'auras pas de CheckBoxList mais juste des checkbox que tu mets dans un datagrid, c'est la methode qui me parait le moins compliqué, mais il faut néanmoins, savoir comment fonctionne asp.net ...

J'espere t'avoir conseillé, si j'avais le temps je te ferais bien ce que tu me demandes mais malheureusement le temps chez moi devient une denrée rare

Bon courage

Cyril (Alias Jesusonline)
0
cs_Matrics Messages postés 23 Date d'inscription lundi 22 décembre 2003 Statut Membre Dernière intervention 22 avril 2005
19 avril 2004 à 21:49
Merci beaucoup pour vos conseilles

je pense que je vais choisir le troisiéme cas qui est le mois compliqué comme tu a dit .
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 avril 2004 à 18:59
Si j'ai le temps ce week end j'essaierais de deriver un datagrid (ou un checkboxlist je sais pas encore) pour te montrer comment cela ce fait

bon courage pour le 3eme cas :-p

Cyril (Alias Jesusonline)
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 avril 2004 à 21:29
J'ai commencé un peu à faire du code :-p
donc j'ai prefere dérive un checkboxlist, car ce qu'on va faire c'est un controle similaire, et comme ca il herite de toutes les posssibilités.
J'ai finit une grande partie du travail, c'est plutot rapide, il me reste plus qu'a gerer les changements de page donc un peu de javascript, mais pour l'instant ca m'a pris que 10 min donc ca risque de me prendre en tout 1H (plus facile que ce que je croyais)

voici le code, bien sur il est pas commenté :'( mais une fois finis je le deposerais en source ici et il sera commenté et inclu dans ma dll :p

donc voici le controle en question j'ai rajouté deux propriétés qui ont le meme nom que ceux du datagrid pour la gestion des pages (le hasard fait bien les choses :-p ) sinon j'ai un peu modifié la methode render, c'est pas tres facile au debut si on ne connais pas ce genre de programmation, mais sinon ca reste assez simple donc voici :


Namespace Cyril.Web.Controls

    Public Class CheckBoxList
        Inherits System.Web.UI.WebControls.CheckBoxList

        Private _PageSize As Integer = 5
        Public Property PageSize() As Integer
            Get
                Return _PageSize
            End Get
            Set(ByVal Value As Integer)
                Value = _PageSize
            End Set
        End Property

        Private _AllowPaging As Boolean
        Public Property AllowPaging() As Boolean
            Get
                Return _AllowPaging
            End Get
            Set(ByVal Value As Boolean)
                _AllowPaging = Value
            End Set
        End Property

        Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

            If _AllowPaging And Me.Items.Count > _PageSize Then

                Dim ControlPaging As New Table

                Dim Row As New TableRow

                For i As Integer = 1 To Me.Items.Count / _PageSize - 1
                    Dim Cell As New TableCell

                    Cell.Text = i.ToString
                    Row.Cells.Add(Cell)
                Next

                ControlPaging.Rows.Add(Row)

                Dim Page As Integer = 1
                Dim array() As String

                Dim lc As New ListItemCollection

                For i As Integer = Page * _PageSize To (Page + 1) * _PageSize - 1
                    lc.Add(Me.Items(i))
                Next

                Me.Items.Clear()
                For i As Integer = 1 To _PageSize - 1
                    Me.Items.Add(lc(i))
                Next

                MyBase.Render(writer)

                ControlPaging.RenderControl(writer)

            Else

                MyBase.Render(writer)

            End If

        End Sub
    End Class


pour s'en servir suffit de rajouter ca dans le aspx
<%@ Register TagPrefix="cyril" Namespace="Cyril.Web.Controls" Assembly="Cyril" %>

<cyril:checkboxlist AllowPaging="True" id=CheckBoxList1 runat="server"/>

et dans le code ajouté des donnés :
For i As Integer = 1 To 20
CheckBoxList1.Items.Add(i)
Next

pour l'instant je pense ca marche assez bien :p je te conseil de continuer avec cet exemple si t'y comprend qqchose car ca te permet de faire du code propre et reutilisable ...

bon courage

Cyril (Alias Jesusonline)
0
Rejoignez-nous