2016-05-30 17 views
0

私はリストビュー&ラジオボタンリストがありません。内部のリストビュー私は1つのハイパーリンクコントロールを配置しました。今すぐradiobuttonListから特定の値が選択されると、ハイパーリンクコントロールのみが表示されます。私はリストビューからFIndControlしようとしましたが、このエラーが発生します。FindControl from asp.netリストビューコントロール

インデックスが範囲外です。負でなく、コレクションのサイズより小さくなければなりません。 パラメータ名:インデックス

<asp:ListView ID="orderList" runat="server" GroupPlaceholderID="groupPlaceHolder1" 
ItemPlaceholderID="itemPlaceHolder1" OnPagePropertiesChanging="OnPagePropertiesChanging"> 
        <LayoutTemplate> 
         <table class="online-orders"> 
        <thead> 
         <tr> 
          <th>Order ID</th> 
          <th>Patient Name</th>   
          <th>Actions</th> 
         </tr> 
        </thead> 
          <asp:PlaceHolder runat="server" ID="groupPlaceHolder1"></asp:PlaceHolder> 
       <tr> 
        <td colspan="8"> 
         <asp:DataPager ID="DataPager1" runat="server" PagedControlID="orderList" PageSize="10"> 
          <Fields> 
           <asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="false" ShowPreviousPageButton="true" 
            ShowNextPageButton="false" /> 
           <asp:NumericPagerField ButtonType="Link" /> 
           <asp:NextPreviousPagerField ButtonType="Link" ShowNextPageButton="true" ShowLastPageButton="false" ShowPreviousPageButton="false" /> 
          </Fields> 
         </asp:DataPager> 
        </td> 
       </tr> 
          </table> 
        </LayoutTemplate> 

        <GroupTemplate> 
         <tr> 
          <asp:PlaceHolder runat="server" ID="itemPlaceHolder1"></asp:PlaceHolder> 
         </tr> 
        </GroupTemplate> 

        <ItemTemplate> 
        <tbody> 
         <tr> 
          <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("OrderID") %>'></asp:Label></td> 
          <td><asp:Label ID="Label2" runat="server" Text='<%# Eval("name") %>'></asp:Label></td> 
          <td> 
           <asp:Label ID="status" runat="server" Text='<%# Eval("status") %>'></asp:Label><br /> 
           <asp:HyperLink ID="decline" CssClass="decline-order-icon" NavigateUrl='<%# "decline-order.aspx?orderID=" & Eval("orderID") %>' Target="_blank" runat="server" Visible="false"></asp:HyperLink> 
          </td> 
         </tr> 
        </tbody> 
         </ItemTemplate> 
        </asp:ListView> 

VBコード

Private Sub orderFilter_SelectedIndexChanged(sender As Object, e As EventArgs) Handles orderFilter.SelectedIndexChanged 
      Dim processing As HyperLink = CType(orderList.Items(orderList.SelectedIndex).FindControl("decline"), HyperLink) 
      If orderFilter.SelectedValue = "processing" Then 
       processing.Visible = True 
      End If 
    End Sub 

答えて

0

それはFindControlではありませんが、orderList.Items(orderList.SelectedIndex)あなたにこのエラーを与えています。私の推測では、アイテムはListViewで現在選択されていないので、SelectedIndexは-1を返します(docsで説明)。

これは非常に可能です。orderFilterという名前の他のコントロールの選択変更、または少なくともイベントハンドラ名orderFilter_SelectedIndexChangedの選択変更を処理していることに注意してください。したがって、orderListに何かが選択されているという保証はありません。

ここでの最初のアドバイスは、これが意味をなさないことを確認し、これに誤りがないことを確認することです。おそらく、orderFilterではなく、orderListの選択変更を処理する必要がありますか?

2枚目の空のように変更された場合の選択には、のために-1とにかくチェックすることです:

Private Sub orderFilter_SelectedIndexChanged(sender As Object, e As EventArgs) Handles orderFilter.SelectedIndexChanged 
    If orderList.SelectedIndex = -1 Then 
     Return 
    End If 

    Dim processing As HyperLink = CType(orderList.Items(orderList.SelectedIndex).FindControl("decline"), HyperLink) 
    If orderFilter.SelectedValue = "processing" Then 
       processing.Visible = True 
    End If 
End Sub 
+0

は、私が欲しいのは値処理がだけにして、次に選択された場合、ハイパーリンクが見え取得する必要があります。しかし、それは動作していません。それでも表示されません – SUN

+0

これをデバッグしようとします。これは、 'orderList.SelectedIndex = -1'が実際にはtrueであるため、このリストで何も選択されていないことを意味します。ポストバックでこのリストを再バインドしないようにしてください – Andrei

関連する問題