2013-02-15 50 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