2010-12-12 3 views
0

Gute Nacht,Gridview-Gruppierung - mit gridviewheper

Ich habe den Gridviewhelper verwendet, um die Zeilen in einer Gridview zu gruppieren.

Jede Zeile als zwei ItemTemplate, jeweils mit einem Kontrollkästchen.

 <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> 

Ich habe einige Probleme, wenn ich für die Zeilen suchen, die eine Checkbox aktiviert haben.

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); 
      } 
     } 
    } 

Ich sehe beim Debuggen, dass aus irgendeinem Grund die Checkbox in der Zeile überprüft, die die GroupHeader- haben, und dann, in der Zeile, die effectibly ausgewählt ist, wird das Kontrollkästchen nicht aktiviert ist.

Also, in wenigen Worten, wie kann ich die groupheader Zeile umgehen und nur die Checkboxen in den anderen Zeilen suchen?

Vielen Dank.

EDIT: Der Fehler: Konvertierung fehlgeschlagen beim Konvertieren von einer Zeichenfolge zu uniqueidentifier.

+0

Vielleicht sollten Sie uns sagen, mehr über diese GridViewHelper Klasse ... es ist nicht Teil der Rahmen –

+0

Ich fand die Klasse hier: http://www.agrinei.com/gridviewhelper/gridviewhelper_en.htm –

Antwort

1

Filtern Sie die Header (und optional die Fußzeile) Zeilen, indem Sie die TableSection-Eigenschaft der GridViewRow überprüfen. Die Syntax kann leicht ausgeschaltet sein (ich meistens VB tun), sondern setzen so etwas wie dies nach dem ForEach Erklärung ...

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

Danke für die Hilfe. Es funktioniert in einigen Fällen, aus irgendeinem Grund, wenn ich die unmittelbar folgende Zeile überprüfe, tritt der Fehler immer noch auf, in den anderen, nein. : \ –