2014-04-23 54 views
1

我在將一個新行添加了多個控件(如文本框)到GridView的標題中時遇到問題。當我...將新行添加到GridView的標題中

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

添加到他們在頭的方法GridView_RowCreated ..他們總是被放入第一排,第二個不是。我該如何改變它?我希望將我創建的行放入第二個標題行。
我試圖自己做,首先,我將ShowHeader修改爲false,並以編程方式添加第一行和第二行,但這是錯誤的方式,特別是當網格沒有數據要顯示但需要顯示標題時。我發現這個討論similar discussion,但intellisence不知道重寫PrepareControlHierarchy。我試圖用Object瀏覽器搜索它,發現這是GridView的方法,但我無法將其插入並測試。也許有人知道更容易解決這個問題。 我需要一些幫助。
已更新! enter image description here


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

我標記了粗體字符串。如果我沒有標籤離開(只需使用HeaderText =「用戶名」),它不會在標題欄中顯示任何名稱。只有當我添加標籤時,它才顯示我的名字。它有什麼問題?

+1

你爲什麼不在裏面創建headertemplate標籤?你能展示一個需求的快照嗎? – naveen

+0

我創建了,我也創建了一些編程控制。現在我有一個問題,我怎麼能改變headertemplate行的地方和我的程序創建的行? – mit

+0

你可以發佈你的標題模板的HTML標記? – fnostro

回答

2

動態,你就必須添加第二個標題行每個已數據綁定

例在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 
+0

偉大的工作!非常感謝 – mit

1

最簡單的解決方案是不要試圖在後面的代碼中執行它。取而代之的是將HeaderTemplate用於您的TemplateFields。

這裏是作爲一個例子:

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

這不起作用如果你有動態列。 – DanielV