0

GridView1gridviewのコードをこれから切り替えようとしています:

        <asp:SqlDataSource ID="dsPar" runat="server" ConnectionString="<%$ ConnectionStrings:connstring %>"
        SelectCommand="SELECT ID,  FileNumber, address, phone from myTable ORDER BY ID"  FilterExpression="ID like '%{0}%'">
        <FilterParameters>
        <asp:ControlParameter Name="StreetSrch" ControlID="searchBox" PropertyName="Text" />
        </FilterParameters>
        </asp:SqlDataSource>

これに:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim strQuery As String = "SELECT ID,  FileNumber, address, Phone from MyTable WHERE Id LIKE '%@strSearch%'  ORDER BY Id"

        Dim cmd As New SqlCommand(strQuery)
        Dim dt As DataTable = GetData(cmd)
        Dim CheckBoxArray As ArrayList
        If ViewState("CheckBoxArray") IsNot Nothing Then
            CheckBoxArray = DirectCast(ViewState("CheckBoxArray"), ArrayList)
        Else
            CheckBoxArray = New ArrayList()
        End If

        If Not IsPostBack Then
            Gridview1.DataBind()
            Dim CheckBoxIndex As Integer
            Dim CheckAllWasChecked As Boolean = False
            Dim chkAll As CheckBox = DirectCast(GridView1.HeaderRow.Cells(0).FindControl("chkAll"), CheckBox)
rest of code....
End If
End Sub

最後に、以下はマークアップのスナップショットです。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="True"
                OnPageIndexChanging = "OnPaging" HeaderStyle-CssClass = "header" Font-Size = "10pt" 
                 AlternatingRowStyle-BackColor = "#C2D69B" OnRowDataBound = "RowDataBound" AllowSorting="true" 
                 PageSize="20" CssClass="Gridview" 
                 GridLines="None">

私は"Object reference not set to an instance of an object."次の行に乗っています:

44行目:Dim chkAll As CheckBox = DirectCast(GridView1.HeaderRow.Cells(0).FindControl( "chkAll")、CheckBox)

これを解決する方法はありますか?

コードは非常に長いので、ここにすべてを投稿したくありませんでした。必要に応じてもっと投稿できます。

4

4 に答える 4

0

オブジェクトの新しいインスタンスとして調光してみてください。これが問題の原因である可能性がありますか?この特定の例外が発生した場合、通常は「新規」なしで何かを暗くするためです。

お役に立てれば!

于 2012-08-30T14:59:37.443 に答える
0

その行でデバッガーを中断します。次に、クイックウォッチ機能を使用して、行の一部を調べ、何がnullであるかを確認できます。GridView1を確認することから始めます。それがnullでない場合は、GridView1.HeaderRowを確認してください。nullオブジェクトが見つかるまで続行します。

于 2012-08-30T15:01:45.620 に答える
0

ブレークポイントとウォッチウィンドウを使用して、コードがどこで間違っているかを正確に見つけることができます。NullReferenceExceptionである変数に対してメソッドを呼び出そうとすると、がスローされますNothing

Option Infer Onを使用したコード例:

Dim firstHeaderCell = GridView1.HeaderRow.Cells(0)
Debug.Assert(firstHeaderCell IsNot Nothing, "Couldn't find the first header cell")
Dim chkAllControl = firstHeaderCell.FindControl("chkAll")
Debug.Assert(chkAllControl IsNot Nothing, "Couldn't find a control named chkAll")
Dim chkAll As CheckBox = TryCast(chkAllControl, CheckBox)
Debug.Assert(chkAll IsNot Nothing, "chkAll exists but it isn't a CheckBox")

これらのアサーションは完全にやり過ぎですが、「ブレークポイント」と「ウォッチウィンドウ」変数を使用したコード例を示すことはできません。

于 2012-08-30T15:04:52.223 に答える
0

ITはnull参照例外をスローしています。

GridView1.HeaderRow.Cells(0).FindControl("chkAll")

チェックボックスが見つからないため、null(Nothing)が返されるため、基本的に実行しているのは、チェックボックスにNothingをキャストしようとしていることです。

于 2012-08-30T15:05:58.430 に答える