OVH Cloud OVH Cloud

datagrid et checkbox

1 réponse
Avatar
jpgr
datagrid et checkbox

je souhaite comprendre de maniere simple (je suis assez nul) comment
recuperer les valeurs dans un datagrid en fonction d'un checkbox

j'ai visionne de nombreux exemples d'ailleurs plutot sur des sites US, ils
fonctionnent parfaitement mais dès que je les adapte (changement de la
chaine de connection + modif pour access)
je me heurte a l'erreur suivante :
L'index était hors limites. Il ne doit pas être négatif et doit être
inférieur à la taille de la collection.
Nom du paramètre : index
Ligne 341 : '
Ligne 342 : If CType(Datagrid1.Items(i).FindControl("SelectionBox"),
CheckBox).Checked Then
Ligne 343 :
sKeys.Add(Datagrid1.DataKeys(Datagrid1.Items(i).ItemIndex).ToString)
Ligne 344 : End If
Ligne 345 : Next


Fichier source : f:\inetpub\wwwroot\admin\vueProd_Compat.aspx.vb Ligne :
343

une piste a vous soumettre
mon datagrid n'affiche pas toute la base mais seulement les enregistrements
correspondant à un droplist.
Donc je resume :
1/ l'utilisateur choisi dans un droplist une famille de produit
2/ le datagrid affiche les enregistrement pour cette famille
3/ l'utilisateur peut alors utiliser des checkbox dans ce datagrid pour
effectuer une action


voici mon datagrid

<TD class="textecourant" colSpan="5">
<DIV align="center"><asp:datagrid id="Datagrid1" runat="server"
CssClass="textecourantgras" AllowSorting="True" ShowFooter="True"
autogeneratecolumns="False" border="1" width="600px" bordercolor="Black"
cellpadding="5" OnSortCommand="SortCommandCompat_OnClick"
OnPageIndexChanged="ChangeCompat_page" AllowPaging="True">
<AlternatingItemStyle CssClass="textecourant"
BackColor="#E4FC84"></AlternatingItemStyle>
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" ForeColor="Silver"
BackColor="Gray"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Selection">
<HeaderStyle Width="20%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<asp:CheckBox id="SelectionBox" runat="server"></asp:CheckBox>
</ItemTemplate>
<FooterStyle HorizontalAlign="Center"></FooterStyle>
<FooterTemplate>
<asp:Button id="Button2" runat="server" Text="Ajouter"
CommandName="AjoutBatch"></asp:Button>
</FooterTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="libTel" SortExpression="libTel"
ReadOnly="True" HeaderText="Modele">
<HeaderStyle Width="30%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="libMarque" HeaderText="Marque">
<HeaderStyle Width="40%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="id_tel" SortExpression="id_tel"
ReadOnly="True" HeaderText="id_tel">
<HeaderStyle Width="10%"></HeaderStyle>
</asp:BoundColumn>
</Columns>
<PagerStyle Mode="NumericPages"></PagerStyle>
</asp:datagrid></DIV>
</TD>

voici mon code behind

Private Sub Datagrid1_ItemCommand(ByVal source As Object, ByVal e As
DataGridCommandEventArgs) Handles Datagrid1.ItemCommand
If e.CommandName = "AjoutBatch" Then



'Dim rowCount As Integer = 0
'Dim gridSelections As StringBuilder = New StringBuilder

'Loop through each DataGridItem, and determine which CheckBox controls
'have been selected.
'Dim Datagrid1Item As DataGridItem
'For Each Datagrid1Item In Datagrid1.Items

'Dim myCheckbox As CheckBox = CType(Datagrid1Item.Cells(0).Controls(1),
CheckBox)
'If myCheckbox.Checked = True Then
'rowCount += 1
'gridSelections.AppendFormat("The checkbox for {0} was selected<br>", _
'Datagrid1.DataKeys(Datagrid1Item.ItemIndex).ToString())
'End If
'Next
'gridSelections.Append("<hr>")
'gridSelections.AppendFormat("Total number selected is: {0}<br>",
rowCount.ToString())
'Message.Text = gridSelections.ToString()

Dim ligne As DataGridItem
Dim sKeys As New ArrayList
Dim i As Integer
Dim l As Integer
l = Datagrid1.Items.Count - 1
Trace.Warn("-------L :-" & l.ToString & "-")
For i = 0 To l
'
If CType(Datagrid1.Items(i).FindControl("SelectionBox"),
CheckBox).Checked Then
sKeys.Add(Datagrid1.DataKeys(Datagrid1.Items(i).ItemIndex).ToString)
End If
Next

'If sKeys.Count <> 0 Then AjouteItems(sKeys)
End If

End Sub

j'avoue ne pas bien comprendre la logique de ce qui est ecrit donc je suis
incapable de comprendre d'ou vient l'erreur.

Merci pour votre aide

1 réponse

Avatar
Norm
Déja répondu dans microsoft.public.fr.dotnet.adonet

merci de mettre tous les noms des ng séparer par une virgule pour un message
et non d'en poster plusieurs.

"jpgr" a écrit dans le message de
news:
datagrid et checkbox

je souhaite comprendre de maniere simple (je suis assez nul) comment
recuperer les valeurs dans un datagrid en fonction d'un checkbox

j'ai visionne de nombreux exemples d'ailleurs plutot sur des sites US, ils
fonctionnent parfaitement mais dès que je les adapte (changement de la
chaine de connection + modif pour access)
je me heurte a l'erreur suivante :
L'index était hors limites. Il ne doit pas être négatif et doit être
inférieur à la taille de la collection.
Nom du paramètre : index
Ligne 341 : '
Ligne 342 : If CType(Datagrid1.Items(i).FindControl("SelectionBox"),
CheckBox).Checked Then
Ligne 343 :
sKeys.Add(Datagrid1.DataKeys(Datagrid1.Items(i).ItemIndex).ToString)
Ligne 344 : End If
Ligne 345 : Next


Fichier source : f:inetpubwwwrootadminvueProd_Compat.aspx.vb Ligne


:
343

une piste a vous soumettre
mon datagrid n'affiche pas toute la base mais seulement les


enregistrements
correspondant à un droplist.
Donc je resume :
1/ l'utilisateur choisi dans un droplist une famille de produit
2/ le datagrid affiche les enregistrement pour cette famille
3/ l'utilisateur peut alors utiliser des checkbox dans ce datagrid pour
effectuer une action


voici mon datagrid

<TD class="textecourant" colSpan="5">
<DIV align="center"><asp:datagrid id="Datagrid1" runat="server"
CssClass="textecourantgras" AllowSorting="True" ShowFooter="True"
autogeneratecolumns="False" border="1" width="600px"


bordercolor="Black"
cellpadding="5" OnSortCommand="SortCommandCompat_OnClick"
OnPageIndexChanged="ChangeCompat_page" AllowPaging="True">
<AlternatingItemStyle CssClass="textecourant"
BackColor="#E4FC84"></AlternatingItemStyle>
<HeaderStyle Font-Bold="True" HorizontalAlign="Center"


ForeColor="Silver"
BackColor="Gray"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Selection">
<HeaderStyle Width="20%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<asp:CheckBox id="SelectionBox" runat="server"></asp:CheckBox>
</ItemTemplate>
<FooterStyle HorizontalAlign="Center"></FooterStyle>
<FooterTemplate>
<asp:Button id="Button2" runat="server" Text="Ajouter"
CommandName="AjoutBatch"></asp:Button>
</FooterTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="libTel" SortExpression="libTel"
ReadOnly="True" HeaderText="Modele">
<HeaderStyle Width="30%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="libMarque" HeaderText="Marque">
<HeaderStyle Width="40%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="id_tel" SortExpression="id_tel"
ReadOnly="True" HeaderText="id_tel">
<HeaderStyle Width="10%"></HeaderStyle>
</asp:BoundColumn>
</Columns>
<PagerStyle Mode="NumericPages"></PagerStyle>
</asp:datagrid></DIV>
</TD>

voici mon code behind

Private Sub Datagrid1_ItemCommand(ByVal source As Object, ByVal e As
DataGridCommandEventArgs) Handles Datagrid1.ItemCommand
If e.CommandName = "AjoutBatch" Then



'Dim rowCount As Integer = 0
'Dim gridSelections As StringBuilder = New StringBuilder

'Loop through each DataGridItem, and determine which CheckBox controls
'have been selected.
'Dim Datagrid1Item As DataGridItem
'For Each Datagrid1Item In Datagrid1.Items

'Dim myCheckbox As CheckBox = CType(Datagrid1Item.Cells(0).Controls(1),
CheckBox)
'If myCheckbox.Checked = True Then
'rowCount += 1
'gridSelections.AppendFormat("The checkbox for {0} was selected<br>", _
'Datagrid1.DataKeys(Datagrid1Item.ItemIndex).ToString())
'End If
'Next
'gridSelections.Append("<hr>")
'gridSelections.AppendFormat("Total number selected is: {0}<br>",
rowCount.ToString())
'Message.Text = gridSelections.ToString()

Dim ligne As DataGridItem
Dim sKeys As New ArrayList
Dim i As Integer
Dim l As Integer
l = Datagrid1.Items.Count - 1
Trace.Warn("-------L :-" & l.ToString & "-")
For i = 0 To l
'
If CType(Datagrid1.Items(i).FindControl("SelectionBox"),
CheckBox).Checked Then
sKeys.Add(Datagrid1.DataKeys(Datagrid1.Items(i).ItemIndex).ToString)
End If
Next

'If sKeys.Count <> 0 Then AjouteItems(sKeys)
End If

End Sub

j'avoue ne pas bien comprendre la logique de ce qui est ecrit donc je


suis
incapable de comprendre d'ou vient l'erreur.

Merci pour votre aide