2012-06-26 39 views
3

問題:如何使用RowCreated事件GridView的

我想在GridView數據綁定的中間添加標題。我更新了DataTable以包含標題和正確位置(我在調試過程中檢查過它們在那裏)。在包含標題的新行上,其中一個不需要的字段(不需要在標題中不需要該信息)在其中有一個名爲「Subheader」的標誌。

背景資料:

所以我的數據錶行持有的服務器名稱,該組的服務器所屬。我更新了DataTable,以便它插入一個新的行,其中服務器名稱是標題文本。該新行所屬的服務器組是「Subheader」。我的數據表保存比我的gridview顯示更多的信息。我的gridview只需要一列,但有一列visibility=false;,其中包含服務器組。

我想達到的目標:

所以,當我綁定此數據表到我希望所有的非首行是指向另一個位置鏈接,GridView的。所有的數據行都是標題,我想只保留它們。

代碼:

private void CurrentServers_RowCreated(Object sender, GridViewRowEventArgs e) 
    { 

     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      if(e.Row.Cells[1].Text != "Subheader") 
      { 
       e.Row.Cells[0].Text = "<a href='/EventViewer.aspx?m=" + e.Row.Cells[0].Text + "&s=&e=Application&r=25'>" + e.Row.Cells[0].Text + "</a>"; 
      } 
     } 

    } 

問題:

這是行不通的。 e.Row.Cells[1].Text != "Subheader"總是返回true。在調試時,我檢查e.Row.Cells[1].Text的值,並在那裏它有我需要的信息。

  1. 這是我應該處理的正確事件嗎?
  2. 如何訪問該數據? e.Row.Cells[1].Texte.Row.Cells[1].ToString()不回我想要的結果,即使當調試我能找到我想要e.Row
  3. 我試着找出究竟是如何工作的,但我無法找到答案的價值。如果我的GridView只有2列數據的列,e.Row.Cells將只有2格的gridview需要,或者這是否發生在它拆分數據表之前(即它是否具有我的數據表的所有列)
+1

爲什麼不試試'_RowDataBound'? – Bastardo

+0

我也嘗試過,但我不確定需要處理哪些事件以及如何處理。請參閱問題1. –

+1

和'_RowDataBound'不起作用?你的問題1:http://forums.asp.net/t/996312.aspx – Bastardo

回答

1

取決於你如何綁定你的數據,你如何讓服務器組,你可以做到以下幾點:

在項目模板,你正在展示nonheader行的內容,而不是純文本使用兩個佔位符,一個將保持非超鏈接文本的標籤,另一個將保持超鏈接。將兩個控件綁定到您使用的任何文本屬性。並將這些佔位符的可見性設置爲Eval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader")!Eval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader")。這樣你就不必編寫代碼來執行控制操作,並且可以避免使用RowDataBound事件。

讓我知道這是沒有意義的:)

編輯:

<asp:GridView ID=".." runat="server" ...> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:PlaceHolder id="phTextContent" runat="server" visible='<%# Eval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader") %>'> 
        <asp:Label id="lblServerGroup" runat="server" text='<%#Eval("ServerGroup")%>'/> 
       </asp:PlaceHolder> 

       <asp:PlaceHolder id="phTextContent" runat="server" visible='<%# !Eval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader") %>'> 
        <asp:HyperLink id="hlServerGroup" runat="server" Text='<%#Eval("ServerGroup")%>' NavigateUrl='<%#string.Fromat("/MyAction.aspx?param=", Eval("Param"))%>'/> 
       </asp:PlaceHolder> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
+0

我明白你的建議,但我不確定如何去做。即我將eval語句放在aspx頁面中是正確的?他們會去哪裏?你能再多出一些代碼嗎? 編輯:我讀了你的代碼的一部分,我想我現在明白了,讓我試一試 –

+0

編輯回覆顯示gridview列的模擬標記 – Dimitri

+0

謝謝,這很聰明。我仍然需要處理甚至,但我只是將數據添加到兩個佔位符,正確的? –