Reputation: 607
I have a nested gridview in my page. The first one is used like a header, so this will display the segment name. The second one is used to display the segment details. Everything works great except I am having problem in styling the first grid. The way I want to display data in this page is Segment (Line Break) Details
But it displays as Segment Details in one row. How would I make the grids appear in two row that takes the whole width of the page. Here is how its set up currently.
<asp:GridView ID="gvSegments" runat="server" AutoGenerateColumns="false" GridLines="None" Width="900px" OnRowDataBound="gvSegments_RowDataBound">
<Columns>
<asp:TemplateField ShowHeader="false">
<ControlStyle Width="140px" />
<ItemTemplate>
<asp:HiddenField ID="hfSegmentId" runat="server" Value='<%# Bind("SegmentId") %>' />
<asp:Label ID="lblSegmentDesc" runat="server" Text='<%# Bind("SegmentDesc") %>' Font-Bold="true" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:GridView ID="gvSegmentDetails" runat="server" AutoGenerateColumns="false" GridLines="None" OnRowDataBound="gvSegmentDetails_RowDataBound" Font-Size="11px">
<Columns>
<asp:TemplateField ShowHeader="false">
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:CheckBox ID="chkAction" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Medium">
<ControlStyle Font-Size="11px" />
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:HiddenField ID="hfSegmentId" runat="server" Value='<%# Bind("SegmentId") %>' />
<asp:HiddenField ID="hfSegmentDetailId" runat="server" Value='<%# Bind("SegmentDetailId") %>' />
<asp:Label ID="lblMediaType" runat="server" Text='<%# Bind("MediaTypeDesc") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Cost per Piece">
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:Label ID="lblCostPerPiece" runat="server" Text='<%# Bind("CostPerPiece") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:LinkButton ID="lnkEditMedia" runat="server" Text="Details" OnClick="lnkEditMedia_Click" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Advertising Months">
<ControlStyle Font-Size="11px" />
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:Label ID="lblAdvertisingMonths" runat="server" Text='<%# Bind("Months") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Budget">
<ControlStyle Width="70px" Font-Size="11px" />
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:Label ID="txtBudget" runat="server" Text='<%# Bind("DropAmount", "{0:$###,###,##0.00}") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Total Quantity">
<ItemStyle HorizontalAlign="Center" />
<ControlStyle Width="50px" Font-Size="11px" />
<ItemTemplate>
<asp:Label ID="lblTotalQty" runat="server" Text='<%# Bind("DropQuantity") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Select Creative">
<ControlStyle Font-Size="11px" />
<ItemTemplate>
<asp:DropDownList ID="ddrCreative" runat="server" AppendDataBoundItems="true" OnSelectedIndexChanged="ddrCreative_SelectedChanged" AutoPostBack="true">
<asp:ListItem Value="-1" Text="Select One" Selected="True" />
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="false">
<ControlStyle Font-Size="11px" />
<ItemTemplate>
<asp:HiddenField ID="hfCreativeUrl" runat="server" />
<asp:HyperLink ID="hprCreativeUrl" runat="server" Target="_blank" Text="Click here" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle BackColor="#a73e20" ForeColor="White" />
<AlternatingRowStyle BackColor="#E4E4E4" />
<RowStyle BackColor="#F7F7F7" />
</asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Upvotes: 3
Views: 1921
Reputation: 520
One way to do it (althought maybe not what you are looking for) is to put both the nested GridView in the same ItemTemplate as your other first column with a break and/or a horizontal line or something like that. It could look something like:
<asp:GridView ID="gvSegments" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:HiddenField />
<asp:Label />
<br />
<hr />
<asp:GridView />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Then to make the row span the entire window you can just add and ItemStyle to your TemplateField
<asp:TemplateField ItemStyle-Width="100%">
Upvotes: 1