如何在gridview中的第一列添加rowspan?

时间:2016-04-01 16:28:59

标签: asp.net gridview row html-table

我有一个gridview,在第一列中我添加了一个表来创建第二行:

enter image description here

我希望托运人地址跨越gridview中的所有列。

代码:

   <asp:GridView  CssClass="printTableResults" runat="server" ID="gvHawb" 
                                    ShowHeaderWhenEmpty="false"
                                    DataKeyField="ID" 
                                    OnRowDataBound="gvHawb_RowDataBound"
                                    AutoGenerateColumns="false"
                                    allowpaging="false">
                                    <HeaderStyle CssClass="printTableHeader" /> 
                                    <RowStyle CssClass="borderB" />
                                    <Columns> 
                                        <asp:TemplateField  HeaderText="HAWB" HeaderStyle-Font-Bold="true" ItemStyle-HorizontalAlign="Center">
                                            <ItemTemplate>
                                                <table>
                                                    <tr>
                                                        <td><asp:Label ID="lblAwbNumber" runat="server" Text='<%# Eval("AWBNumber") %>'></asp:Label></td>
                                                    </tr>
                                                    <tr>
                                                        <td><label>Shipper</label></td>
                                                        <td><asp:Label ID="lblFullShipperAddress" runat="server" Text='<%# Eval("FullShipperAddress") %>'></asp:Label></td>
                                                    </tr>   
                                                </table>
                                            </ItemTemplate>
                                        </asp:TemplateField> 
                                        <asp:TemplateField HeaderText="Pieces" HeaderStyle-Font-Bold="true" ItemStyle-HorizontalAlign="Center">
                                            <ItemTemplate>
                                                <asp:Label ID="lblPieces" runat="server" Text='<%# Eval("TotalNoOfPieces") %>'></asp:Label>
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                 </Columns>                
                            </asp:GridView>

有没有办法让托运人跨越gridview的行? 此gridview中共有8列。

2 个答案:

答案 0 :(得分:3)

您可以尝试将包含发件人地址的表移动到外部表中最后一列的ItemTemplate。然后将表格放在自己的tr上。像这样:

<ItemTemplate>

    <asp:Label ID="lblPieces" runat="server" Text='<%# Eval("TotalNoOfPieces") %>'></asp:Label>

    </tr>                 <!-- end the outer table row -->
    <tr colspan="7">      <!-- start new row in the outer table -->
        <table>
            <tr>
                <td><asp:Label ID="lblAwbNumber" runat="server" Text='<%# Eval("AWBNumber") %>'></asp:Label></td>
            </tr>
            <tr>
                <td><label>Shipper</label></td>
                <td><asp:Label ID="lblFullShipperAddress" runat="server" Text='<%# Eval("FullShipperAddress")%>'></asp:Label></td>
            </tr>
        </table>

</ItemTemplate>

请注意,您不应该以结尾</tr>结束,因为外部表格渲染会添加该结尾。

这个答案是在没有任何真正测试的情况下放在一起的,因此我并不能保证它能够正常工作并且开箱即用#34;。

答案 1 :(得分:0)

如果您希望第一个单元格跨越该行的所有8列,则可以将此处理程序添加到GridView的PreRender事件中:

void gvHawb_PreRender(object sender, EventArgs e)
{
    foreach (GridViewRow row in gvHawb.Rows)
    {
        if (/* some condition */)
        {
            // Remove the other cells of the row
            while (row.Cells.Count > 1)
            {
                row.Cells.RemoveAt(1);
            }

            // Set the ColumnSpan attribute
            row.Cells[0].ColumnSpan = 8;
        }
    }
}

我假设它将在满足特定条件的行上完成。

您也可以考虑使用ListView,它比GridView更容易自定义。