【问题标题】:Show Footer row as a first row in gridview在gridview中将页脚行显示为第一行
【发布时间】:2014-04-17 14:26:53
【问题描述】:

我的网格视图中有一个页脚模板,允许用户向网格添加新项目。因为他们不想每次都在页面下方添加,并且他们希望将该页脚行作为 gridview 的第一行。

ASPX:

 <asp:GridView ID="gvApplication" runat="server" AutoGenerateColumns="False" HorizontalAlign="center"
            ShowFooter="True" CellPadding="3" GridLines="Both" CssClass="contentfont" ShowHeaderWhenEmpty="True"
            EmptyDataText="No Records Found"  OnRowDataBound="gvApplication_RowDataBound"
            OnRowDeleting="gvApplication_RowDeleting" OnRowCommand="gvApplication_RowCommand"
            DataKeyNames="ID,Group,App_Name" Width="100%">
            <Columns>
                <asp:TemplateField HeaderText="ID"
                        <asp:Label ID="lblID" runat="server" Text='<%# Bind("[ID]") %>'></asp:Label>
                    </ItemTemplate>
                    <FooterTemplate>
                        <asp:DropDownList ID="ddlID" runat="server" Width="150px" AutoPostBack="True"
                            OnSelectedIndexChanged="ddlID_SelectedIndexChanged" />
                    </FooterTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Application Group">
                    <ItemTemplate>
                        <asp:Label ID="lblAppGrp" runat="server" Text='<%# Bind("[Group]") %>'></asp:Label>
                    </ItemTemplate>
                    <FooterTemplate>
                        <asp:DropDownList ID="ddlGroup" runat="server" Width="150px" AutoPostBack="True"
                            OnSelectedIndexChanged="ddlGroup_SelectedIndexChanged" />
                    </FooterTemplate>
                </asp:TemplateField> 
                <asp:TemplateField HeaderText="Application Name">
                    <ItemTemplate>
                        <asp:Label ID="lblAppName" runat="server" Text='<%# Bind ("[App_Name]") %>'></asp:Label>
                    </ItemTemplate>
                    <FooterTemplate>
                        <asp:DropDownList ID="ddlApp" runat="server" Width="150px" AutoPostBack="True"
                            OnSelectedIndexChanged="ddlApp_SelectedIndexChanged" />
                    </FooterTemplate>
                </asp:TemplateField>                    
                <asp:TemplateField HeaderText="">
                    <ItemTemplate>
                        <asp:ImageButton ID="btnDelete" runat="server" CommandName="Delete" ImageUrl="~/Images/delete.gif"
                            ToolTip="Delete" OnClientClick="return confirm('Are you sure want to Delete');" />
                    </ItemTemplate>
                    <FooterTemplate>
                        <asp:LinkButton ID="lnkAdd" Width="65px" runat="server" CausesValidation="False"
                            CommandName="AddNew" Text="Link Code" ForeColor="#3f6da2" Font-Bold="true">
                        </asp:LinkButton>
                    </FooterTemplate>
                </asp:TemplateField>
            </Columns>
            <RowStyle Wrap="False" />
            <HeaderStyle Wrap="False" BackColor="#5B95CF" ForeColor="White" Height="25px" BorderStyle="Ridge" />
            <FooterStyle BackColor="#D1DDF1" ForeColor="White" Font-Bold="True" />
        </asp:GridView>

CS:

public void gvApplication_RowDataBound(object sender, GridViewRowEventArgs e)
{
    DataRowView drview = e.Row.DataItem as DataRowView;
    if (e.Row.RowType == DataControlRowType.Footer)
    {
        DropDownList ddlID = (DropDownList)e.Row.FindControl("ddlID");

        ddlID .DataSource = AppDataRepository.GetID();
        ddlID .DataValueField = "ID";
        ddlID .DataTextField = "ID";
        ddlID .DataBind();
        ddlID .Items.Insert(0, new ListItem("--Select ID--", "0"));
        ddlID .SelectedIndex = 0;

        DropDownList ddlGroup = (DropDownList)e.Row.FindControl("ddlGroup");
        ddlGroup.DataSource = AppDataRepository.GetGroup();
        ddlGroup.DataValueField = "Group";
        ddlGroup.DataTextField = "Group";
        ddlGroup.DataBind();
        ddlGroup.Items.Insert(0, new ListItem("--Select Group--", "0"));
        ddlGroup.SelectedIndex = 0;

        DropDownList ddlApp = (DropDownList)e.Row.FindControl("ddlApp");
        ddlApp.DataSource = AppDataRepository.GetApp();
        ddlApp.DataValueField = "App_Name";
        ddlApp.DataTextField = "App_Name";
        ddlApp.DataBind();
        ddlApp.Items.Insert(0, new ListItem("--Select App--", "0"));
        ddlApp.SelectedIndex = 0;
    }
}

试试 HeaderTemplate

<asp:TemplateField HeaderText="ID"
                    <asp:Label ID="lblID" runat="server" Text='<%# Bind("[ID]") %>'></asp:Label>
                </ItemTemplate>
                <HeaderTemplate>
                    <asp:DropDownList ID="ddlID" runat="server" Width="150px" AutoPostBack="True"
                        OnSelectedIndexChanged="ddlID_SelectedIndexChanged" />
                </HeaderTemplate>
            </asp:TemplateField>

【问题讨论】:

  • 如果您只是将页脚更改为页眉以使其显示在顶部怎么办?
  • @DarthContinent - 如果我将其更改为标题模板,他们将看不到任何实际的标题文本,并且它在那里被覆盖。
  • 嗯,在 HeaderTemplate 中,您可以将项目排列在表格中,以便它们是分开的并且仍然全部可见。
  • @DarthContinent - 请查看我的带有标题模板的帖子,如果我错了,请尝试纠正我。

标签: c# asp.net .net gridview


【解决方案1】:

FooterStyle-HorizontalAlign="Right"添加到模板的父列

【讨论】:

  • 你的意思是在这个标签
  • asp:TemplateField 内
  • 不,我还是什么都看不到。
【解决方案2】:

自从 Internet Explorer 不再支持 css top:expression - 我不得不将 gridview 标题分离到一个单独的表中。

我有一张桌子。在第一行/第一个单元格中,我放置了另一个包含表格标题的表格。 在下一行/第一个单元格中,我将 div 设置为比上表宽 20px(以允许 div 上的滚动条)。 div 包含没有标题的 gridview。在 gridview 的 pre_render 中,我设置了两个表中列的宽度。

我花了一些时间检查用户屏幕的大小等,并设置表格/div 的宽度(以及 div 的高度)。结果是一个带有静态标题的表格,其宽度与下面的 gridview 完全相同。您可以轻松地做到这一点,并在标题表中添加一个额外的行来包含当前位于 gridview 的页脚行中的控件。

【讨论】:

  • 你能发布一些对我很有帮助的样本
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多