вложенный gridview C#

#c# #asp.net

#c# #asp.net

Вопрос:

У меня есть вложенный gridview на моей странице. Первый используется как заголовок, поэтому здесь будет отображаться имя сегмента. Второй используется для отображения сведений о сегменте. Все работает отлично, за исключением того, что у меня возникли проблемы с оформлением первой сетки. Способ, которым я хочу отображать данные на этой странице, — это сведения о сегменте (разрыве строки)

Но он отображается в виде сведений о сегменте в одной строке. Как бы я сделал так, чтобы сетки отображались в двух строках, которые занимают всю ширину страницы. Вот как это настроено в настоящее время.

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

Ответ №1:

Один из способов сделать это (хотя, возможно, это не то, что вы ищете) — поместить оба вложенных GridView в тот же ItemTemplate, что и ваш другой первый столбец, с разрывом и / или горизонтальной линией или что-то в этом роде. Это может выглядеть примерно так:

 <asp:GridView ID="gvSegments" runat="server">
<Columns>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:HiddenField />
            <asp:Label />

            <br />
            <hr />

            <asp:GridView />
        </ItemTemplate>
    </asp:TemplateField>
</Columns>
</asp:GridView>
  

Затем, чтобы строка охватывала все окно, вы можете просто добавить и ItemStyle к вашему TemplateField

 <asp:TemplateField ItemStyle-Width="100%">
  

Комментарии:

1. Круто! Никогда даже не думал об этом. Спасибо Деррику. Это сработало.