晚安,
我使用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时转换失败。
答案 0 :(得分:1)
通过检查GridViewRow的TableSection属性筛选出Header(以及可选的页脚)行。语法可能略有偏差(我主要做VB),但是在你的ForEach声明之后加上这样的东西......
If (dataitem.TableSection != TableRowSection.TableHeader) {
object rows;
//Rest of the code goes here...
}