Bonjour,
j'aimerais utilisé 2 datagrid dans une même page aspx mais je n'y arrive pas !
Voici le message d'erreur que j'obtiens:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
AllowCustomPaging doit avoir la valeur true, et VirtualItemCount doit être défini pour un DataGrid avec l'ID DG_ConsultAdresse lorsque AllowPaging a la valeur true et que le datasource sélectionné n'implémente pas ICollection
Et voici mon code :
-- la première partie avec le 1er datagrid (pas de problème avec celui-là) :
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
 
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="BonsLivraisonsCtrlAdresse.ascx.vb" Inherits="Sagem.DNN.Modules.BonsLivraisonsCtrlAdresse.BonsLivraisonsCtrlAdresse" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 
<asp:datagrid id="DG_CtrlAdresse" runat="server" Width="1400px" MaxWidth="1800px" AllowSorting="True"
	CellPadding="0" BackColor="White" BorderWidth="1px" BorderStyle="None" BorderColor="#3366CC"
	AutoGenerateColumns="False" GridLines="None"
	OnEditCommand="Edit"
     OnUpdateCommand="Update"
     OnCancelCommand="Cancel">
     <EditItemStyle backcolor="#FFFF80" forecolor="Black" font-italic="False"
                     font-names="Times New Roman" font-strikeout="False" font-underline="False"
                     font-overline="False" font-bold="False">
    </EditItemStyle>
    <AlternatingItemStyle BackColor="Honeydew"></AlternatingItemStyle>
	<SelectedItemStyle Font-Bold="True" ForeColor="#CCFF99" BackColor="#009999"></SelectedItemStyle>
	<ItemStyle Height="20px" ForeColor="#003399" BackColor="White"></ItemStyle>
	<HeaderStyle Height="20px" ForeColor="#CCCCFF" BackColor="#003399"></HeaderStyle>
	<FooterStyle Height="20px" ForeColor="#003399" BackColor="#99CCCC"></FooterStyle>
	<Columns> 
	<asp:EditCommandColumn HeaderText="Action" HeaderStyle-ForeColor="red" HeaderStyle-Font-Bold="True"
	HeaderStyle-HorizontalAlign="Left" ItemStyle-width="100px"
	ItemStyle-HorizontalAlign="Left" ItemStyle-ForeColor="red" ItemStyle-Font-Bold="True"
	CancelText="Annuler" UpdateText="MAJ" EditText="Modifier">
	</asp:EditCommandColumn>
	<asp:BoundColumn DataField="Ad_idAdresse" HeaderText="Adresse" Visible="false" ReadOnly="true"></asp:BoundColumn>
	<asp:BoundColumn DataField="BonOK" HeaderText="Bons" Visible="true" ReadOnly="true"  ItemStyle-Width="40px"></asp:BoundColumn>
	<asp:BoundColumn DataField="En_sNom" HeaderText="Entreprise" ReadOnly="true" ItemStyle-Width="200px"></asp:BoundColumn>
	<asp:BoundColumn DataField="Si_sNomSite" HeaderText="Site" ReadOnly="true" ItemStyle-Width="100px"></asp:BoundColumn>
	<asp:TemplateColumn HeaderText="Adresse">
		<ItemTemplate>
             <%#Container.DataItem("Ad_sAdresse")%>
        </ItemTemplate>
		<EditItemTemplate>
			<asp:TextBox id="TextBox1" name="TextBox1" Value='<%#Container.DataItem("Ad_sAdresse")%>' runat="Server" Width="400" ></asp:TextBox>
		</EditItemTemplate>
		<ItemStyle Width="500px"></ItemStyle>
	</asp:TemplateColumn>
		<asp:BoundColumn DataField="Vi_sNom" HeaderText="Ville" ReadOnly="true" ItemStyle-Width="150px"></asp:BoundColumn>
		<asp:BoundColumn DataField="Pa_sNom" HeaderText="Pays" ReadOnly="true" ItemStyle-Width="150px"></asp:BoundColumn>
		<asp:TemplateColumn HeaderText="Cocher pour<br/>invalider l'adresse" ItemStyle-HorizontalAlign="Center">
			<ItemTemplate>
				<asp:CheckBox ID="chkSelection"  Runat="server" />
			</ItemTemplate>
			<ItemStyle HorizontalAlign="Center" width="150px"></ItemStyle>
		</asp:TemplateColumn>
	</Columns>
	<PagerStyle Height="20px" HorizontalAlign="Left" ForeColor="#003399" BackColor="#99CCCC" Mode="NumericPages"></PagerStyle>
</asp:datagrid>
<TABLE id="Table2" cellSpacing="0" cellPadding="1" Width="1400px" MaxWidth="1800px" border="0">
	<TR>
	<TD width="1000"></TD>
	<TD><asp:button id="Btn_ValiderAd" OnClick="ValiderAdresse" Height="32px" Width="128" runat="server" Text="Valider"></asp:button></TD>
	<TD height="30px"></TD>
	</TR>
</TABLE>
--la deuxième partie avec le second datagrid (que je viens de rajouter) :
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
 
 
 
<TABLE id="Table3" cellSpacing="0" cellPadding="1" width="616px" border="0">
	<TR>
	<TD width="70"></TD>
	<TD><asp:dropdownlist id="Ddl_Entreprise" Width="400" runat="server" Enabled="True" AutoPostBack="True"></asp:dropdownlist></TD>
	</TR>
</TABLE>
<asp:datagrid id="DG_ConsultAdresse" runat="server" Width="1400px" MaxWidth="1800px" AllowCustomPaging="False" AllowPaging="True" AllowSorting="True"
	CellPadding="0" BackColor="White" BorderWidth="1px" BorderStyle="None" BorderColor="#3366CC"
	AutoGenerateColumns="False" GridLines="None" PageSize="10">
     <EditItemStyle backcolor="#FFFF80" forecolor="Black" font-italic="False"
                     font-names="Times New Roman" font-strikeout="False" font-underline="False"
                     font-overline="False" font-bold="False">
    </EditItemStyle>
    <AlternatingItemStyle BackColor="Honeydew"></AlternatingItemStyle>
	<SelectedItemStyle Font-Bold="True" ForeColor="#CCFF99" BackColor="#009999"></SelectedItemStyle>
	<ItemStyle Height="15px" ForeColor="#003399" BackColor="White"></ItemStyle>
	<HeaderStyle Height="15px" ForeColor="#CCCCFF" BackColor="#003399"></HeaderStyle>
	<FooterStyle Height="15px" ForeColor="#003399" BackColor="#99CCCC"></FooterStyle>
	<Columns> 
	<asp:EditCommandColumn HeaderText="Action" HeaderStyle-ForeColor="red" HeaderStyle-Font-Bold="True"
	HeaderStyle-HorizontalAlign="Left" ItemStyle-width="100px"
	ItemStyle-HorizontalAlign="Left" ItemStyle-ForeColor="red" ItemStyle-Font-Bold="True">
	</asp:EditCommandColumn>
	<asp:BoundColumn DataField="Si_sNomSite" HeaderText="Site" ReadOnly="true" ItemStyle-Width="100px"></asp:BoundColumn>
	<asp:BoundColumn DataField="Ad_sAdresse" HeaderText="Adresse" ReadOnly="true" ItemStyle-Width="500px"></asp:BoundColumn>
	<asp:BoundColumn DataField="Vi_sNom" HeaderText="Ville" ReadOnly="true" ItemStyle-Width="150px"></asp:BoundColumn>
	<asp:BoundColumn DataField="Pa_sNom" HeaderText="Pays" ReadOnly="true" ItemStyle-Width="150px"></asp:BoundColumn>
	</Columns>
	<PagerStyle Height="20px" HorizontalAlign="Left" ForeColor="#003399" BackColor="#99CCCC" Mode="NumericPages"></PagerStyle>
</asp:datagrid>

et le code behind :
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
 
Option Strict Off
 
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.Control
Imports System.Web.UI.WebControls.LinkButton
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls.HtmlGenericControl
 
Namespace Sagem.DNN.Modules.BonsLivraisonsCtrlAdresse
 
    Public MustInherit Class BonsLivraisonsCtrlAdresse
		Inherits Entities.Modules.PortalModuleBase
		Implements Entities.Modules.IActionable
		Implements Entities.Modules.IPortable
        Implements Entities.Modules.ISearchable
        Private adresse As adresse
        Private entrepriseExpeditrice As Entreprise
        Protected WithEvents Btn_ValiderAd As System.Web.UI.WebControls.Button
        Protected WithEvents DG_CtrlAdresse As System.Web.UI.WebControls.DataGrid
        Protected WithEvents DG_ConsultAdresse As System.Web.UI.WebControls.DataGrid
        Protected WithEvents Ddl_Entreprise As System.Web.UI.WebControls.DropDownList
 
#Region "Controls"
#End Region
 
#Region "Event Handlers"
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim i As Integer
            Dim temp As Integer
 
            adresse = New adresse
 
            If Ddl_Entreprise.SelectedValue = "" Then
                temp = 0
            Else
                temp = Ddl_Entreprise.SelectedValue
            End If
 
            If temp = 0 Then
                entrepriseExpeditrice = New Entreprise(0)
            Else
                entrepriseExpeditrice = New Entreprise(temp)
            End If
 
            'chargement du DataGrid
            If Not Page.IsPostBack Then
                AfficherAdresses()
                AfficherEntreprise()
 
                ' if Page.IsPostBack
            Else
                'si un nom a été sélectionné dans le combo Entreprise
                If entrepriseExpeditrice.IdEntreprise > 0 Then
                    DG_ConsultAdresse.DataSource = adresse.ListerEntreprise(entrepriseExpeditrice.IdEntreprise)
                    DG_ConsultAdresse.DataBind()
                End If
 
            End If
 
        End Sub
 
        Private Sub AfficherAdresses()
            Dim s As Double
            adresse = New Adresse
 
            DG_CtrlAdresse.DataSource = adresse.ListerNew()
            DG_CtrlAdresse.DataBind()
            s = DG_CtrlAdresse.Width.Value
        End Sub
 
        Private Sub AfficherEntreprise()
            Dim i As Integer
 
            Ddl_Entreprise.SelectedIndex = -1
            Ddl_Entreprise.DataSource = entrepriseExpeditrice.Lister()
            Ddl_Entreprise.DataValueField = "En_idEntreprise"
            Ddl_Entreprise.DataTextField = "En_sNom"
            Ddl_Entreprise.DataBind()
            For i = 0 To Ddl_Entreprise.Items.Count - 1
                If Ddl_Entreprise.Items(i).Value = entrepriseExpeditrice.IdEntreprise Then
                    Ddl_Entreprise.SelectedIndex = i
                End If
            Next
 
            If Not Ddl_Entreprise.SelectedItem Is Nothing Then
                entrepriseExpeditrice.IdEntreprise = Ddl_Entreprise.SelectedValue
            End If
        End Sub
 
        Sub Edit(ByVal Sender As Object, ByVal e As DataGridCommandEventArgs)
 
            ' Passage en mode édition l'élement sélectionné
            DG_CtrlAdresse.EditItemIndex = e.Item.ItemIndex
 
            ' Rechargement du DataGrid
            adresse = New adresse
            DG_CtrlAdresse.DataSource = adresse.ListerNew()
            DG_CtrlAdresse.DataBind()
 
        End Sub
 
        Sub Update(ByVal Sender As Object, ByVal e As DataGridCommandEventArgs)
            ' Déclaration des différents objets
            Dim sRec As String
            Dim TempIdAdresse As String
            Dim TempAdresse As String
 
            ' Récupération de l'ID de la classe et des données saisies
            TempIdAdresse = e.Item.Cells(1).Text
            TempAdresse = Request.Form.Item(9).ToString()
 
            adresse = New adresse(CInt(TempIdAdresse))
            adresse._Adresse = TempAdresse
 
            adresse.Update()
 
            ' Indication de l'absence d'élément sélectionné
            DG_CtrlAdresse.EditItemIndex = -1
 
            AfficherAdresses()
 
        End Sub
 
        Sub Cancel(ByVal Sender As Object, ByVal e As DataGridCommandEventArgs)
 
            ' Indication de l'absence d'élément sélectionné
            DG_CtrlAdresse.EditItemIndex = -1
 
            ' Rechargement du DataGrid
            AfficherAdresses()
 
        End Sub
 
        Sub ValiderAdresse(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim sReq As String
            Dim TempAdresse As String
            Dim l As Integer
            Dim i As Integer
 
            l = DG_CtrlAdresse.Items.Count - 1
 
            For i = 0 To l
                adresse = New adresse(CInt(DG_CtrlAdresse.Items(i).Cells(1).Text))
                If CType(DG_CtrlAdresse.Items(i).FindControl("chkSelection"), CheckBox).Checked Then
                    If adresse.TestAdresseBon Then
                        adresse.UpdateInvalide()
                    Else
                        adresse.Supprimer()
                    End If
                Else
                    adresse.UpdateValide()
                End If
            Next
 
            ' Indication de l'absence d'élément sélectionné
            DG_CtrlAdresse.EditItemIndex = -1
 
            ' Rechargement du DataGrid
            AfficherAdresses()
 
        End Sub
 
        Private Sub DG_ConsultAdresse_PageIndexChanged1(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DG_ConsultAdresse.PageIndexChanged
            DG_ConsultAdresse.CurrentPageIndex = e.NewPageIndex
            If entrepriseExpeditrice.IdEntreprise > 0 Then
                DG_ConsultAdresse.DataSource = adresse.ListerEntreprise(entrepriseExpeditrice.IdEntreprise)
 
            End If
            DG_ConsultAdresse.DataBind()
        End Sub
 
#End Region
 
#Region "Optional Interfaces"
        Public ReadOnly Property ModuleActions() As Entities.Modules.Actions.ModuleActionCollection Implements Entities.Modules.IActionable.ModuleActions
            Get
                Dim Actions As New Entities.Modules.Actions.ModuleActionCollection
                Actions.Add(GetNextActionID, Localization.GetString(Entities.Modules.Actions.ModuleActionType.AddContent, LocalResourceFile), Entities.Modules.Actions.ModuleActionType.AddContent, "", "", EditUrl(), False, DotNetNuke.Security.SecurityAccessLevel.Edit, True, False)
                Return Actions
            End Get
        End Property
 
        Public Function ExportModule(ByVal ModuleID As Integer) As String Implements Entities.Modules.IPortable.ExportModule
            ' included as a stub only so that the core knows this module Implements Entities.Modules.IPortable
        End Function
 
        Public Sub ImportModule(ByVal ModuleID As Integer, ByVal Content As String, ByVal Version As String, ByVal UserID As Integer) Implements Entities.Modules.IPortable.ImportModule
            ' included as a stub only so that the core knows this module Implements Entities.Modules.IPortable
        End Sub
 
        Public Function GetSearchItems(ByVal ModInfo As Entities.Modules.ModuleInfo) As Services.Search.SearchItemInfoCollection Implements Entities.Modules.ISearchable.GetSearchItems
            ' included as a stub only so that the core knows this module Implements Entities.Modules.ISearchable
        End Function
 
#End Region
 
#Region " Web Form Designer Generated Code "
 
        'This call is required by the Web Form Designer.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
 
        End Sub
 
        'NOTE: The following placeholder declaration is required by the Web Form Designer.
        'Do not delete or move it.
        Private designerPlaceholderDeclaration As System.Object
 
        Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN: This method call is required by the Web Form Designer
            'Do not modify it using the code editor.
            InitializeComponent()
        End Sub
 
#End Region
 
    End Class
 
End Namespace
Je précise que les 2 datagrids utilisent les mêmes tables mais pas les mêmes enregistrements :
le premier datagrid affiche les nouvelles adresses (à valider ou à invalider) et le second les adresses déjà existantes (pour permettre à l'utilisateur de comparer avec les nouvelles )

J'ai recherché sur d'autres sites et j'ai vu quelques trucs sur ICollection (http://msdn.microsoft.com/fr-fr/library/bb469838.aspx : " la source de données des contrôles ASP.NET est un ICollection générique, pour offrir une souplesse maximale à votre choix de sources de données" mais je ne vois pas comment utiliser ça dans mon cas ?)

merci d'avance