我尝试在asp.net的gridview中使用gridview,这就是我所做的
问题是如果行太多,标题会变得很烦人。我希望内部gridview共享这样的公共标题:
这在ASP.NET中是否可行?怎么样?
示例gridview标记
<asp:GridView ID="ItemsGridView" runat="server" AutoGenerateColumns="False" BackColor="White" CssClass="gridviews" Width="600px"
BorderColor="Black" BorderStyle="Ridge" BorderWidth="1px" CellPadding="5" OnRowCommand="ItemsGridView_RowCommand">
<Columns>
<asp:TemplateField HeaderText="" SortExpression="DepartmentId">
<ItemTemplate>
<asp:LinkButton CommandName="GoDet" Font-Underline="false" ForeColor="#676771" Font-Bold="True" ID="linkDepartmentId" CommandArgument='<%# Eval("DepartmentId") %>'
Text="View" runat="server" />
</ItemTemplate>
<ItemStyle VerticalAlign="Middle" HorizontalAlign="Center" />
</asp:TemplateField>
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-VerticalAlign="Middle">
<ItemStyle VerticalAlign="Middle" Width="300px" Wrap="False"></ItemStyle>
</asp:BoundField>
<asp:TemplateField HeaderText="Sub-Groups">
<ItemTemplate>
<asp:GridView ID="SubGroupGridView" runat="server" AutoGenerateColumns="False" BackColor="White" CssClass="subgridviews"
DataSource='<%# Bind("SubGroupees") %>' BorderStyle="Outset" BorderWidth="1px" CellPadding="3" CellSpacing="3" ShowHeader="False" GridLines="Vertical" OnRowCommand="SubGroupGridView_RowCommand">
<Columns>
<asp:BoundField DataField="Name">
<ItemStyle Width="180px" />
</asp:BoundField>
<asp:TemplateField HeaderText="" SortExpression="SubGroupId">
<ItemTemplate>
<asp:LinkButton CommandName="GoSubDet" ID="linkSubGroupId" Font-Underline="false" ForeColor="#676771" Font-Bold="True"
CommandArgument='<%# Eval("SubGroupId") %>' Text="Edit" runat="server" />
</ItemTemplate>
<ItemStyle VerticalAlign="Middle" HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="" SortExpression="SubGroupId">
<ItemTemplate>
<asp:LinkButton CommandName="DelSub" ID="linkDelSub" Font-Underline="false" ForeColor="#676771" Font-Bold="True" CommandArgument='<%# Eval("SubGroupId") %>'
Text="Delete" runat="server" />
</ItemTemplate>
<ItemStyle VerticalAlign="Middle" HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
</asp:GridView>
</ItemTemplate>
<ItemStyle VerticalAlign="Middle" HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="" SortExpression="DepartmentId">
<ItemTemplate>
<asp:LinkButton CommandName="AddSub" ID="linkSubGroupId" Font-Underline="false" ForeColor="#676771" Font-Bold="True" CommandArgument='<%# Eval("DepartmentId") %>'
Text="Add Sub-Group" runat="server" />
</ItemTemplate>
<ItemStyle VerticalAlign="Middle" HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="" SortExpression="DepartmentId">
<ItemTemplate>
<asp:LinkButton CommandName="DelItem" ID="linkDelDepartmentId" Font-Underline="false" ForeColor="#676771" Font-Bold="True" CommandArgument='<%# Eval("DepartmentId") %>'
Text="Delete" runat="server" />
</ItemTemplate>
<ItemStyle VerticalAlign="Middle" HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
答案 0 :(得分:0)
您可以在父GridView中使用OnRowDataBound
事件,并检查嵌套的GridView是否是第一个,并且只显示第一个中的标题。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//find the nested grid in the current row with findcontrol
GridView gridView = e.Row.FindControl("nestedGridView") as GridView;
//check if it is the first nested gridview and show/hide the header
if (e.Row.RowIndex == 0)
{
gridView.ShowHeader = true;
}
else
{
gridView.ShowHeader = false;
}
//fill the nested grid with data
gridView.DataSource = dataSource;
gridView.DataBind();
}
}