2010-12-12 42 views
0

Bonne nuit,Gridview grouping - using gridviewheper

J'ai utilisé l'outil gridviewhelper pour regrouper les lignes dans une grille.

GridViewHelper helper = new GridViewHelper(this.Resultados); 
    helper.RegisterGroup("EntidadeNome", true, true); 
    helper.GroupHeader += new GroupEvent(helper_GroupHeader); 
    this.Resultados.DataSource = DT; 
    this.Resultados.DataBind(); 

Chaque ligne comme deux itemtemplate, chacune avec une case à cocher.

 <asp:GridView ID="Resultados" runat="server" AutoGenerateColumns="false" GridLines="None" 
         CssClass="mGrid" PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt" 
         ShowHeader="false"> 
         <Columns> 
          <asp:BoundField DataField="EntidadeNome" SortExpression="EntidadeNome" /> 
          <asp:BoundField DataField="ID" HeaderText="IDLinhascompras" ItemStyle-CssClass="hidden" 
           HeaderStyle-CssClass="hidden" ItemStyle-HorizontalAlign="Center" /> 
          <asp:BoundField DataField="Artigo" HeaderText="Artigo" SortExpression="Artigo" ItemStyle-Width="50px" 
           ItemStyle-HorizontalAlign="Center" /> 
// Some BoundFieds here 
          <asp:TemplateField HeaderText="A" ItemStyle-Width="40px" SortExpression="A"> 
           <ItemTemplate> 
            <asp:CheckBox ID="A" Width="40" runat="server" /> 
           </ItemTemplate> 
           <ItemStyle HorizontalAlign="Center" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="R" ItemStyle-Width="40px" SortExpression="R"> 
           <ItemTemplate> 
            <asp:CheckBox ID="R" Width="40" runat="server" /> 
           </ItemTemplate> 
           <ItemStyle HorizontalAlign="Center" /> 
          </asp:TemplateField> 
         </Columns> 
         <EmptyDataTemplate> 
         <label>Sem resultados para apresentar</label> 
         </EmptyDataTemplate> 
        </asp:GridView> 

Je rencontre des problèmes lorsque je recherche les lignes cochées.

protected void EnviaArtigos_Click(object sender, EventArgs e) 
{ 

    CheckBox chkA, chkR; 

    foreach (GridViewRow dataItem in Resultados.Rows) 
    { 
     object rows; 

     chkA = (CheckBox)dataItem.FindControl("A"); 
     chkR = (CheckBox)dataItem.FindControl("R"); 

     if (chkA.Checked) 
     { 
      try 
      { 
       Motor.DSO.BDAPL.Execute("UPDATE LINHASCOMPRASSTATUS SET ESTADOTRANS = 'A' WHERE IDLINHASCOMPRAS ='" + dataItem.Cells[1].Text + "'", out rows, 
        -1); 
       this.Resultados.DataSource = null; 
       this.Resultados.DataBind(); 
      } 
      catch (Exception ex) 
      { 
       Response.Write(ex.Message); 
      } 
     } 
     if (chkR.Checked) 
     { 
      try 
      { 
       Motor.DSO.BDAPL.Execute("UPDATE LINHASCOMPRASSTATUS SET ESTADOTRANS = 'R' WHERE IDLINHASCOMPRAS ='" + dataItem.Cells[1].Text + "'", out rows, -1); 
       this.Resultados.DataSource = null; 
       this.Resultados.DataBind(); 
      } 
      catch (Exception ex) 
      { 
       Response.Write(ex.Message); 
      } 
     } 
    } 

Je vois lors du débogage, que pour une raison quelconque la case est cochée dans la ligne qui ont le GroupHeader, puis, dans la ligne qui est effectibly sélectionnée, la case n'est pas cochée.

Donc, en quelques mots, comment puis-je contourner la ligne de tête de groupe et rechercher uniquement les cases à cocher dans les autres lignes?

Merci.

EDIT: L'erreur: La conversion a échoué lors de la conversion d'une chaîne de caractères en identificateur unique.

+0

Peut-être que vous devriez nous en dire plus au sujet de cette classe GridViewHelper ... il ne fait pas partie de la framework –

+0

J'ai trouvé la classe ici: http://www.agrinei.com/gridviewhelper/gridviewhelper_fr.htm –

Répondre

1

Filtrez les lignes En-tête (et éventuellement le pied de page) en vérifiant la propriété TableSection du GridViewRow. La syntaxe peut être légèrement (la plupart du temps je fais VB), mais mettre quelque chose comme ça après votre déclaration foreach ...

If (dataitem.TableSection != TableRowSection.TableHeader) { 
object rows; 
//Rest of the code goes here... 
} 
+0

Merci pour l'aide. Cela fonctionne dans certains cas, pour une raison quelconque, si je vérifie la ligne qui suit immédiatement, l'erreur se produit toujours, dans les autres, non. : \ –