Группировка Gridview - используя gridviewheper - PullRequest
0 голосов
/ 13 декабря 2010

Спокойной ночи,

Я использовал 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();

Каждая строка состоит из двух элементов, каждая с флажком.

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

При отладке я вижу, что по какой-то причине флажок установлен в строке, в которой есть заголовок группы, а затем в строке, которая выбрана эффективно, флажок не установлен.

Итак, в двух словах, как я могу обойти строку заголовка группы и искать только флажки в других строках?

Спасибо.

РЕДАКТИРОВАТЬ: Ошибка: Преобразование не удалось при преобразовании из символьной строки в уникальный идентификатор.

1 Ответ

1 голос
/ 13 декабря 2010

Отфильтруйте строки верхнего (и, возможно, нижнего) нижнего колонтитула, проверив свойство TableSection объекта GridViewRow. Синтаксис может быть немного отключен (я в основном использую VB), но поместите что-то вроде этого после объявления ForEach ...

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