2013-02-15 51 views
0

我有一個帶有一些BoundFields和一些HyperLinkFields的GridView。 HyperLinkField,我想分配一個NavigateUrl只有在其中有文字「拒絕」的單元格。如何根據內容將NavigateUrl分配給HyperLinkField(GridView)

這裏是我的標記:

<asp:GridView ID="gvS25ATransactions" CellSpacing="-1" GridLines="None" AutoGenerateColumns="false" OnPreRender="gvS25ATransactions_PreRender" AllowPaging="true" AllowSorting="true" PageSize="10" runat="server"> 
<Columns> 
    <asp:BoundField DataField="SIN" SortExpression="SIN" HeaderText="<%$ Resources:S25ATransactions, litSIN %>" /> 
    <asp:BoundField DataField="TRANSACTION_TYPE_DESC_EN" SortExpression="TRANSACTION_TYPE_DESC_EN" HeaderText="<%$ Resources:S25ATransactions, litType %>" /> 
    <asp:BoundField DataField="TRANSACTION_TYPE_DESC_FR" SortExpression="TRANSACTION_TYPE_DESC_FR" HeaderText="<%$ Resources:S25ATransactions, litType %>" /> 
    <asp:BoundField DataField="DATE_UPDATED" SortExpression="DATE_UPDATED" HeaderText="<%$ Resources:S25ATransactions, litDate %>" /> 
    <asp:BoundField DataField="USER_CODE" SortExpression="USER_CODE" HeaderText="<%$ Resources:S25ATransactions, litUser %>" /> 
    <asp:HyperLinkField DataTextField="STATUS_DESC_EN" SortExpression="STATUS_DESC_EN" HeaderText="<%$ Resources:S25ATransactions, litStatus %>" /> 
    <asp:HyperLinkField DataTextField="STATUS_DESC_FR" SortExpression="STATUS_DESC_FR" HeaderText="<%$ Resources:S25ATransactions, litStatus %>" /> 
</Columns> 
<PagerStyle CssClass="pagination" /> 

而這正是我試圖到目前爲止做:

Protected Sub gvS25ATransactions_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvS25ATransactions.RowDataBound 

    If e.Row.RowType = DataControlRowType.DataRow Then 

     For Each column As DataControlField In gvS25ATransactions.Columns 

      If column.HeaderText = "Status" Or column.HeaderText = "Statut" Then 

       For i As Integer = 0 To gvS25ATransactions.Rows.Count - 1 

        If gvS25ATransactions.Rows(i).Cells(5).Text = "Rejected by SD110" Then 
         Dim hl As HyperLink = TryCast(e.Row.FindControl("HyperLink1"), HyperLink) 
         hl.NavigateUrl = "#coucou" 
        End If 

       Next 

      End If 

     Next 

    End If 

End Sub 

細胞與文本「拒絕」將在任第5或第6欄(一個是英文,另一個是法文)。

當我做了上面的代碼,它永遠不會在這個循環。

For i As Integer = 0 To gvS25ATransactions.Rows.Count - 1 

它說「我」沒有聲明。由於其保護級別,可能無法進入

幫助?

UPDATE

這裏是新的標記我已經把關於RedDevil79的建議

<asp:GridView ID="gvS25ATransactions" CellSpacing="-1" GridLines="None" AutoGenerateColumns="false" OnPreRender="gvS25ATransactions_PreRender" AllowPaging="true" AllowSorting="true" PageSize="10" runat="server"> 
<Columns> 
    <asp:BoundField DataField="SIN" SortExpression="SIN" HeaderText="<%$ Resources:S25ATransactions, litSIN %>" /> 
    <asp:BoundField DataField="TRANSACTION_TYPE_DESC_EN" SortExpression="TRANSACTION_TYPE_DESC_EN" HeaderText="<%$ Resources:S25ATransactions, litType %>" /> 
    <asp:BoundField DataField="TRANSACTION_TYPE_DESC_FR" SortExpression="TRANSACTION_TYPE_DESC_FR" HeaderText="<%$ Resources:S25ATransactions, litType %>" /> 
    <asp:BoundField DataField="DATE_UPDATED" SortExpression="DATE_UPDATED" HeaderText="<%$ Resources:S25ATransactions, litDate %>" /> 
    <asp:BoundField DataField="USER_CODE" SortExpression="USER_CODE" HeaderText="<%$ Resources:S25ATransactions, litUser %>" /> 
    <asp:TemplateField SortExpression="STATUS_DESC_EN" HeaderText="<%$ Resources:S25ATransactions, litStatus %>"> 
     <ItemTemplate> 
      <asp:HyperLink ID="STATUS_DESC_EN" runat="server"><%# Eval("STATUS_DESC_EN")%></asp:HyperLink> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField SortExpression="STATUS_DESC_FR" HeaderText="<%$ Resources:S25ATransactions, litStatus %>"> 
     <ItemTemplate> 
      <asp:HyperLink ID="STATUS_DESC_FR" runat="server"><%# Eval("STATUS_DESC_FR")%></asp:HyperLink> 
     </ItemTemplate> 
    </asp:TemplateField>  
</Columns> 
<PagerStyle CssClass="pagination" /> 

這是VB代碼

Protected Sub gvS25ATransactions_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvS25ATransactions.RowDataBound 

    If e.Row.RowType = DataControlRowType.DataRow Then 
     Dim hl As HyperLink = TryCast(e.Row.FindControl("STATUS_DESC_EN"), HyperLink) 
     Dim hl2 As HyperLink = TryCast(e.Row.FindControl("STATUS_DESC_FR"), HyperLink) 
     If hl.Text = "Rejected by SD110" Or hl2.Text = "Rejeté par SD110" Then 
      hl.NavigateUrl = "#coucou" 
      hl2.NavigateUrl = "#coucoufr" 
     End If 
    End If 

End Sub 

這個問題我我現在面臨的是hl.Text和hl2.Text總是=「」所以它從來沒有在if語句

+0

所有在GridView的文本來自數據庫文本‘拒絕’將在STATUS_DESC_EN或STATUS_DESC_FR(’Rejet作品」在這種情況下, )列 – Karinne 2013-02-15 15:55:09

+0

你確定錯誤是指代碼中的'i'嗎?我沒有看到它的任何問題 – AbZy 2013-02-15 15:56:39

+0

以及...沒有錯誤,我...它只是它永遠不會進入循環,因爲它說「'我'沒有宣佈。它可能無法訪問,由於它的保護級別「 – Karinne 2013-02-15 15:59:20

回答

1

試試這個雲:

轉換在GridView中2個超級鏈接字段模板,改變的RowDataBound到:

If e.Row.RowType = DataControlRowType.DataRow Then 

    For Each column As DataControlField In gvS25ATransactions.Columns 

     If column.HeaderText = "Status" Or column.HeaderText = "Statut" Then    

       If e.Row.Cells(5).Text = "Rejected by SD110" Then 
        Dim hl As HyperLink = TryCast(e.Row.FindControl("HyperLink1"), HyperLink) 
        hl.NavigateUrl = "#coucou" 
       End If 

     End If 

    Next 

End If 

說明:

您必須將超鏈接字段轉換爲模板,因爲您需要FindControl函數中控件的名稱。

在RowDataBound中,您不需要遍歷gridview的所有行。當數據添加到Gridview中時,GridData中的每一行都會執行RowDataBound。 這就是爲什麼你不需要for循環。

更新:

If e.Row.RowType = DataControlRowType.DataRow Then 
    Dim hl As HyperLink = TryCast(e.Row.FindControl("STATUS_DESC_EN"), HyperLink) 
    Dim hl2 As HyperLink = TryCast(e.Row.FindControl("STATUS_DESC_FR"), HyperLink) 
    If hl.Text = "Rejected by SD110" Or hl2.Text = "Rejected by SD110" Then 
     hl.NavigateUrl = "#coucou" 
    End If 
End If 

超鏈接標籤不規範:

<asp:GridView ID="gvS25ATransactions" CellSpacing="-1" GridLines="None" AutoGenerateColumns="false" OnPreRender="gvS25ATransactions_PreRender" AllowPaging="true" AllowSorting="true" PageSize="10" runat="server"> 
    <Columns> 
     <asp:BoundField DataField="SIN" SortExpression="SIN" HeaderText="<%$ Resources:S25ATransactions, litSIN %>" /> 
     <asp:BoundField DataField="TRANSACTION_TYPE_DESC_EN" SortExpression="TRANSACTION_TYPE_DESC_EN" HeaderText="<%$ Resources:S25ATransactions, litType %>" /> 
     <asp:BoundField DataField="TRANSACTION_TYPE_DESC_FR" SortExpression="TRANSACTION_TYPE_DESC_FR" HeaderText="<%$ Resources:S25ATransactions, litType %>" /> 
     <asp:BoundField DataField="DATE_UPDATED" SortExpression="DATE_UPDATED" HeaderText="<%$ Resources:S25ATransactions, litDate %>" /> 
     <asp:BoundField DataField="USER_CODE" SortExpression="USER_CODE" HeaderText="<%$ Resources:S25ATransactions, litUser %>" /> 
     <asp:TemplateField SortExpression="STATUS_DESC_EN" HeaderText="<%$ Resources:S25ATransactions, litStatus %>"> 
      <ItemTemplate> 
       <asp:HyperLink ID="STATUS_DESC_EN" runat="server" Text='<%# Eval("STATUS_DESC_EN")%>'></asp:HyperLink> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField SortExpression="STATUS_DESC_FR" HeaderText="<%$ Resources:S25ATransactions, litStatus %>"> 
      <ItemTemplate> 
       <asp:HyperLink ID="STATUS_DESC_FR" runat="server" Text='<%# Eval("STATUS_DESC_FR")%>'></asp:HyperLink> 
      </ItemTemplate> 
     </asp:TemplateField>  
    </Columns> 
    <PagerStyle CssClass="pagination" /> 
</asp:GridView> 

你必須到外地綁定到超鏈接的文本屬性。

重要: Text屬性只能用「不‘

+0

感謝您的幫助!所以...我將改爲」> <%#Eval(」STATUS_DESC_EN「)%> 。而當我一步一步通過代碼,e.Row.Cells(5).Text,始終=「」 – Karinne 2013-02-19 15:44:27

+0

看到我的更新@Karinne – RedDevil79 2013-02-20 13:03:21

+0

這也沒有效果。 hl和hl2總是=「」我已經用新的標記更新了我的原始帖子......可以嗎? – Karinne 2013-02-20 15:54:16