【发布时间】: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 - 请查看我的带有标题模板的帖子,如果我错了,请尝试纠正我。