簡體   English   中英

將新行添加到GridView的Header中

[英]Add new row into Header of GridView

我有一個問題,添加一個新行與幾個控件,如textBoxes到GridView的Header。 當我將它們添加到GridView_RowCreated方法中的Header中時...

if (e.Row.RowType == DataControlRowType.Header)
        {
            GridViewRow r = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
            TableCell tc = new TableCell();

......他們總是排在第一排,而不是第二排。 我該怎么改變它? 我希望我創建的行放在第二個Header Row中。
我試圖自己做,首先,我將ShowHeader修改為false並以編程方式添加第一行和第二行,但這是錯誤的方式,特別是當網格沒有要顯示的數據但是有必要顯示標題時。 我發現這個討論類似的討論 ,但intellisence不知道有關覆蓋PrepareControlHierarchy。 我試圖用Object瀏覽器搜索它,發現這是GridView的方法,但是我無法插入它並進行測試。 也許有人知道更容易解決這個問題。 我需要一些幫助。
更新!!! 在此輸入圖像描述


 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        CellPadding="4" DataKeyNames="username" DataSourceID="SqlDataSource1" 
        ForeColor="#333333" GridLines="None" onrowcreated="GridView1_RowCreated">
        <AlternatingRowStyle BackColor="White" />
        <Columns>
            <asp:TemplateField HeaderText="username" SortExpression="username">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("username") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Name" SortExpression="Name">
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Surname" SortExpression="Surname">
                <ItemTemplate>
                    <asp:Label ID="Label3" runat="server" Text='<%# Bind("Surname") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>




更新!!!! 是的,教授你是對的,在我看來,這是將控件放在HeaderTemplate中最簡單的方法。 我忘記了。 但我有一個小問題,如何在不添加額外標簽的情況下添加列名? 這是我的代碼:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        CellPadding="4" DataKeyNames="username" DataSourceID="SqlDataSource1" 
        ForeColor="#333333" GridLines="None" onrowcreated="GridView1_RowCreated">
        <AlternatingRowStyle BackColor="White" />
        <Columns>
            <asp:TemplateField **HeaderText="username"** SortExpression="username">
            <HeaderTemplate>
                **<asp:Label ID="Label4" runat="server" Text="username"></asp:Label>**<br />
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            </HeaderTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("username") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Name" SortExpression="Name">
            <HeaderTemplate>
            <asp:Label ID="Label4" runat="server" Text="Name"></asp:Label><br />
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            </HeaderTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Surname" SortExpression="Surname">
            <HeaderTemplate>
            <asp:Label ID="Label4" runat="server" Text="Surname"></asp:Label><br />
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            </HeaderTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label3" runat="server" Text='<%# Bind("Surname") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>

我標記了粗體字符串。 如果我不使用Label(只使用HeaderText =“username”),則不會在標題欄中顯示任何名稱。 只有我添加標簽,它才會顯示我的名字。 這有什么問題?

動態地,您必須在每個數據綁定后添加第二個標題行

VB中的示例,但您應該能夠輕松地轉換它。

Private Sub GridView1_DataBound(sender As Object, e As EventArgs) Handles GridView1.DataBound

    // Add checks for row count.

    // create a new row
    Dim gvr As New GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal)

    Dim gvc As TableCell

    // Create a new empty cell
    gvc = New TableCell()

    //add a new TextBox to the cell
    gvc.Controls.Add(New TextBox())

    // Add the cell to the row
    gvr.Cells.Add(gvc)

    // repeat above as necessary

    // Add row to Gridview at index 1 (0 is bound header)
    // GridView1.Controls(0) is the Gridview table
    GridView1.Controls(0).Controls.AddAt(1, gvr)
End Sub

最簡單的解決方案是不要嘗試在后面的代碼中執行此操作。 而是使用HeaderTemplate作為TemplateFields。

這是一個例子:

<asp:TemplateField HeaderText="username" SortExpression="username">
    <HeaderTemplate>                              
      username
      <br />
      <asp:TextBox ID="username" runat="server" />
    </HeaderTemplate>   
    <ItemTemplate...   
</asp:TemplateField>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM