-1

updatepanel で gridview を並べ替えようとしています。コンパイルはできますが、Object reverence not set to an instance of an objectエラーが発生します。私はこのガイドに従おうとしていますが、VBで

default.aspx

 <ajx:UpdatePanel ID="ajaxpanel" runat="server">   
    <ContentTemplate>         
                <asp:GridView ID="gvProgramDetails" runat="server" AutoGenerateColumns="False" 
                    CssClass="gridview" DataKeyNames="ProgramNumber" 
             AllowPaging="True" PageSize="2" AllowSorting="True" OnSorting="gvProgramDetails_Sorting">
                    <Columns>
                        <asp:CommandField ControlStyle-CssClass="button delete" ShowDeleteButton="True">
                            <ControlStyle CssClass="button delete" />
                        </asp:CommandField>
                        <asp:CommandField ControlStyle-CssClass="button save" ShowEditButton="True">
                            <ControlStyle CssClass="button save" />
                        </asp:CommandField>
                        <asp:BoundField DataField="ProgramNumber" HeaderText="ProgramNumber" 
                            InsertVisible="False" ReadOnly="True" SortExpression="ProgramNumber" />
                        <asp:BoundField DataField="ProgramName" HeaderText="ProgramName" 
                            SortExpression="ProgramName" />
                        <asp:BoundField DataField="ProgramStatus" HeaderText="ProgramStatus" 
                            SortExpression="ProgramStatus" />
                        <asp:BoundField DataField="RecordType" HeaderText="RecordType" 
                            SortExpression="RecordType" />
                        <asp:BoundField DataField="ProgramInformation" HeaderText="ProgramInformation" 
                            SortExpression="ProgramInformation" />
                    </Columns>
                </asp:GridView>
                </ContentTemplate>

default.aspx.vb

Imports System.Web.Services
Partial Class processes_ProgramTrack_Default
Public Property SortOrder() As String
        Get
            If (ViewState("SortOrder").ToString = "desc") Then
                ViewState("SortOrder") = "asc;"
            Else
                ViewState("SortOrder") = "desc"
            End If
            Return ViewState("SortOrder").ToString()
        End Get
        Set(ByVal value As String)
            ViewState("SortOrder") = value
        End Set
    End Property
    Public Sub bindGridView(Optional ByVal sortExp As String = "", Optional ByVal sortDir As String = "")
        Dim connstr As String = ConfigurationManager.ConnectionStrings("WEBConnectionString").ConnectionString
        Dim conn As New SqlConnection(connstr)
        If conn.State = ConnectionState.Closed Then
            conn.Open()
        End If
        Dim myDataView As New DataView()
        Dim mysqlCommand As New SqlCommand("SELECT tblPrgTrackPrograms.ProgramNumber, tblPrgTrackPrograms.ProgramName, tblPrgTrackPrograms.ProgramStatus, tblPrgTrackProgramDocumentation.RecordType, tblPrgTrackProgramDocumentation.ProgramInformation FROM tblPrgTrackPrograms INNER JOIN tblPrgTrackProgramDocumentation ON tblPrgTrackPrograms.ProgramNumber = tblPrgTrackProgramDocumentation.ProgramNumber")
        Dim myDataSet As New DataSet()
        Dim mySQLAdapter As New SqlDataAdapter(mysqlCommand)
        mySQLAdapter.SelectCommand.Connection = conn

        mySQLAdapter.Fill(myDataSet)
        myDataView = myDataSet.Tables(0).DefaultView
        If sortExp <> String.Empty Then

            myDataView.Sort = String.Format("{0}{1}", sortExp, sortDir)
        End If
        gvProgramDetails.DataSource = myDataView
        gvProgramDetails.DataBind()
    End Sub

    Protected Sub gvProgramDetails_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvProgramDetails.Load
        bindGridView()
    End Sub
    Protected Sub gvProgramDetails_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvProgramDetails.PageIndexChanging
        gvProgramDetails.PageIndex = e.NewPageIndex
        bindGridView()
    End Sub

    Protected Sub gvProgramDetails_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles gvProgramDetails.RowDeleting

    End Sub

    Protected Sub gvProgramDetails_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles gvProgramDetails.Sorting
        SortOrder = ViewState("SortOrder").ToString
        bindGridView(e.SortExpression, SortOrder)
    End Sub

End Class

エラーメッセージがポップアップメッセージボックスとして表示されます。私が考えていることは、SortOrder に値が割り当てられていないことです。

4

1 に答える 1

0

ViewState("SortOrder")ToStringを呼び出す前に、値が含まれていることを確認する必要があります。ToStringそうしないと、 nullでメソッドを呼び出すことができないため、(これまで見てきたように)その例外がスローされます。

基本的に、そのViewState変数への参照を " If (ViewState("SortOrder") IsNot Nothing Then"ブロックでラップする必要があり、場合によっては " Else"セクションで特別な処理を提供する必要があります(必要な場合)。

あなたの財産のためにこのようなもの:

Public Property SortOrder() As String
    Get
        If (ViewState("SortOrder") IsNot Nothing Then
            If (ViewState("SortOrder").ToString = "desc") Then
                ViewState("SortOrder") = "asc;"
            Else
                ViewState("SortOrder") = "desc"
            End If
        End If
        Return ViewState("SortOrder").ToString()
    End Get
    Set(ByVal value As String)
        ViewState("SortOrder") = value
    End Set
End Property

そして、ソートイベントについても同じことが言えます。

Protected Sub gvProgramDetails_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles gvProgramDetails.Sorting
    If (ViewState("SortOrder") IsNot Nothing Then
        SortOrder = ViewState("SortOrder").ToString
        bindGridView(e.SortExpression, SortOrder)
    End If
End Sub

注:これまでに提供した情報を考慮すると、これは問題についての私の最善の推測です。エラーをスローしている行を提供していただければ、もう一度確認させていただきます。

于 2012-06-07T19:33:39.823 に答える