为什么Gridview页脚添加了额外的列?

时间:2013-03-27 13:42:50

标签: c# asp.net gridview

无法相信我必须要问这个问题 - 您认为这样的基本功能可以直接实现,但是我无法为Gridview创建页脚。我查看了各种教程和其他问题,例如hereherehere,但仍然遇到了困难。

问题在于正确显示页脚(即没有添加额外的空列)。从我收集的内容来看,你需要将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>

enter image description here

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

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

色彩方案方法:

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

3 个答案:

答案 0 :(得分: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,因为我通过向Label添加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;
    }
}

答案 1 :(得分:2)

您不应将FooterTemplateBoundField一起使用。页脚模板应与TemplateField一起使用。此外,页脚模板应用每列,这样就可以在您拥有数字的情况下聚合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>

<强>结果:

enter image description here

或者,您可以坚持使用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); 
   }
}

答案 2 :(得分:0)

如何编码此表单:

                            购买订购大师 [lblPONumberH]
                       PO编号://这里是textBox // RequireField                        PO日期://这里是带有日历扩展程序的文本框                        供应商://这是下拉列表 创建者://这里是文本框                              保存//按钮取消//按钮              网格视图

项目描述预算编号数量UOM价格 数据绑定DataBound DataBound DataBound DataBound编辑&amp; Del btn
 在页脚样式 txtItemDescription ddlBnumber txtQuantity ddlUOM txtPrice AddBtn