0

いくつかの BoundFields といくつかの HyperLinkFields を持つ GridView があります。HyperLinkField、NavigateUrl を、「拒否」というテキストが含まれるセルのみに割り当てたいと考えています。

ここに私のマークアップがあります:

<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 ループに入ることはありません。

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

「i」は宣言されていません。保護レベルが原因でアクセスできない場合があります

ヘルプ?

アップデート

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 ステートメントに入らないことです。

4

1 に答える 1

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 のすべての行を反復処理する必要はありません。RowDataBound は、データが追加されると、gridview のすべての行に対して実行されます。そのため、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 プロパティは ' not " でのみ機能します

于 2013-02-19T12:37:38.980 に答える