Gridview分组 - 使用gridviewheper

时间:2010-12-12 22:59:20

标签: c# asp.net gridview grouping

晚安,

我使用gridviewhelper对gridview中的行进行分组。

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

每行为两个itemtemplate,每个都有一个复选框。

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

当我搜索已选中复选框的行时,我遇到了一些问题。

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

我在调试时看到,由于某种原因,在具有groupheader的行中选中了复选框,然后,在有效选择的行中,不会选中该复选框。

所以,简而言之,我如何绕过groupheader行并只搜索其他行中的复选框?

谢谢。

编辑:错误:从字符串转换为uniqueidentifier时转换失败。

1 个答案:

答案 0 :(得分:1)

通过检查GridViewRow的TableSection属性筛选出Header(以及可选的页脚)行。语法可能略有偏差(我主要做VB),但是在你的ForEach声明之后加上这样的东西......

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