1

不敢相信我不得不问这个问题——你会认为这样一个基本功能很容易实现,但我在为 Gridview 创建页脚时遇到了麻烦。我已经查看了各种教程和其他问题,例如此处此处此处,但仍然遇到困难。

问题在于正确显示页脚(即没有添加额外的空列)。根据我收集的信息,您需要将 FooterTemplate 放在 TemplateField 标记中,否则它将不起作用 - 至少它不会为我编译。如果我在 BoundFields 列之后插入它,那么它会添加一个额外的列,这是不可取的。

<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="false" AllowSorting="true"
    CellPadding="3" HorizontalAlign="Center" GridLines="both" CssClass="dataTable1"
    OnRowDataBound="Colour_Columns" Caption="PARTIAL COMPARE" ShowFooter="true">
    <HeaderStyle BackColor="Black" ForeColor="AntiqueWhite" Height="30" CssClass="header" />
    <FooterStyle BackColor="Black" ForeColor="AntiqueWhite" Height="30" CssClass="footer" />
    <Columns>
        <asp:BoundField DataField="FOLDER" HeaderText="Location" />
        <asp:BoundField DataField="FILE" HeaderText="File" />
        <asp:BoundField DataField="CHECKSUM" HeaderText="Checksum" Visible="false" />
        <asp:BoundField DataField="STATUS" HeaderText="Status" />
        <asp:BoundField DataField="DATE" HeaderText="Date" Visible="false" />
        <asp:TemplateField>
            <FooterTemplate>
                <asp:Button ID="UpdateButton" runat="server" Text="UPDATE" CssClass="updateButton" />
            </FooterTemplate>
        </asp:TemplateField>
     </Columns>
</asp:GridView>

在此处输入图像描述

同样,如果我将它放在 BoundFields 之前,它会在左侧添加一个额外的列。如果我尝试将所有 BoundFields 放在 TemplateField 下,它将无法编译。

如何在不创建额外列的情况下将页脚添加到 gridview?另外,当我们使用它时,如何将它的 colspan 设置为 1?(它只会有一个更新按钮,因此页脚中不需要三列。)

颜色方案方法:

protected void Colour_Columns(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (e.Row.Cells[3].Text == "Match")
           e.Row.BackColor = Color.Lime;
        if (e.Row.Cells[3].Text == "Mismatch")
           e.Row.BackColor = Color.Gold;
        if (e.Row.Cells[3].Text == "New File")
           e.Row.BackColor = Color.PeachPuff;
    }
}

此方法似乎无法识别 ItemTemplate 值...

4

3 回答 3

3

尝试仅对最后一列使用模板字段,并在该列中指定 ItemTemplate 和 FooterTemplate。试试下面的代码。

<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="false" AllowSorting="true"
    CellPadding="3" HorizontalAlign="Center" GridLines="both" CssClass="dataTable1"
    OnRowDataBound="Colour_Columns" Caption="PARTIAL COMPARE" ShowFooter="true">
    <HeaderStyle BackColor="Black" ForeColor="AntiqueWhite" Height="30" CssClass="header" />
    <FooterStyle BackColor="Black" ForeColor="AntiqueWhite" Height="30" CssClass="footer" />
    <Columns>
        <asp:BoundField DataField="FOLDER" HeaderText="Location" />
        <asp:BoundField DataField="FILE" HeaderText="File" />
        <asp:BoundField DataField="CHECKSUM" HeaderText="Checksum" Visible="false" />
        <asp:TemplateField HeaderText="Status">
             <ItemTemplate>
                  <asp:Label ID="StatusLabel" runat="server" Text='<%# Eval("STATUS") %>' />
            </ItemTemplate>
            <FooterTemplate>
                <asp:Button ID="UpdateButton" runat="server" Text="UPDATE" CssClass="updateButton" />
            </FooterTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="DATE" HeaderText="Date" Visible="false" />
     </Columns>
</asp:GridView>

我更改了 Cs 文件以从模板字段中读取值。请重新复制 ASPX,因为我也通过向标签添加 ID 进行了更改

CS:

protected void Colour_Columns(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label StatusLabel = e.Row.FindControl("StatusLabel") as Label;
        if (StatusLabel.Text == "Match")
           e.Row.BackColor = Color.Lime;
        if (StatusLabel.Text == "Mismatch")
           e.Row.BackColor = Color.Gold;
        if (StatusLabel.Text == "New File")
           e.Row.BackColor = Color.PeachPuff;
    }
}
于 2013-03-27T13:59:27.883 回答
2

你不应该使用FooterTemplatewith BoundField。页脚模板旨在与TemplateField.Additional 页脚模板一起应用这样您就可以在有数字数据的情况下在 gridview 底部聚合总计。

这是在第一列中使用带有页脚字段的模板字段的示例,您可以根据需要进行更改以满足您的需要:

ASPX:

    <asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="false" ShowFooter="true">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="lblFolder" runat="server" Text='<%# Eval("FOLDER") %>' />
                </ItemTemplate>
                <FooterTemplate>
                    Footer content displayed under FOLDER, notice no extra column!
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="lblFile" runat="server" Text='<%# Eval("FILE") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="lblCheck" runat="server" Text='<%# Eval("CHECKSUM") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

结果:

在此处输入图像描述

或者,您可以坚持使用 BoundFields 并在代码中动态添加页脚:

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Footer)
    {
        var footer = new Label();
        footer.Text = "Footer content";
        //Footer will be displayed under the *first* column
        e.Row.Cells[0].Controls.Add(footer); 
   }
}
于 2013-03-27T14:35:00.760 回答
0

如何编码此表格:

  PURCHASE ORDER MASTER [lblPONumberH]                       
PO Number ://here is textBox //RequireField PO Date : //here istextbox with Calender extender Vendor: //here is dropdown Created By ://here is textbox save//Button Cancel//Button网格视图                                

项目 描述 预算编号 数量 UOM 价格 Databound DataBound DataBound DataBound DataBound Edit & Del btn
in footer style txtItemDescription ddlBnumber txtQuantity ddlUOM txtPrice AddBtn

于 2013-05-01T04:33:01.700 回答