私は、動的に移入/再投入しようとしている2つのDropDownListsを持っています。ページのロード時には、両方のDDLが、同じテーブルの各列の異なる値で埋められます。いずれかのDLLに選択した項目が変更された場合、変更を反映するために他のDDLの内容が必要です(これは後でGridViewでフィルタリングのフォームを作成するためです)。オブジェクト参照がオブジェクトのインスタンスに設定されていません。 VB.net
以下のコードでは、DDLFirstNameが変更されたときにDDLLastNameが以前に変更されているかどうかを確認します(変更していない場合は「Please Select」と表示されます)。それが変更されていない場合、 "%"の値を変数に入れて(つまり、クエリ文字列でALLと言うことができます)、DDLLastNameの内容を消去します。ファーストネームはDDLFirstNameで選択されたアイテムのファーストネームと同じです。これをクリアする必要がある場合は、新しいクエリ文字列の結果をページのロード時に生成されたリストの末尾に追加します。
しかし、素敵なエラーが表示されます: オブジェクト参照がオブジェクトのインスタンス DDLLFirstNameを変更するときに、DDLLastNameがまだ "選択してください"になっています。
Public Sub DDLFirstName_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DDLFirstName.TextChanged
Dim FNvar As String
Dim LNlist As ListItem
If DDLLastName.SelectedItem.Text = "Please Select" Then
FNvar = "%"
DDLLastName.Items.Clear()
Else
FNvar = DDLFirstName.SelectedItem.Text
End If
Using conn As New SqlConnection()
conn.ConnectionString = WebConfigurationManager.ConnectionStrings("TestDBConnectionString").ConnectionString
Using cmd As New SqlCommand("SELECT DISTINCT [LastName] FROM [Employees] WHERE [FirstName] LIKE '" & FNvar & "'", conn)
conn.Open()
Using reader = cmd.ExecuteReader()
While reader.Read
LNlist = New ListItem()
LNlist.Value = reader("LastName")
LNlist.Text = reader("LastName")
DDLLastName.Items.Add(LNlist)
End While
End Using
End Using
End Using
End sub
Page_Loadイベント:あなたはこのエラーに遭遇した場合
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
If Not Page.IsPostBack Then
FillFNDLL()
FillLNDLL()
End If
Catch exc As Exception 'Module failed to load
ProcessModuleLoadException(Me, exc)
End Try
End Sub
Protected Sub FillFNDLL()
Dim FNlist As ListItem
Dim sel As New ListItem
sel.Text = "Please Select"
sel.Value = "*"
DDLFirstName.Items.Add(sel)
Using conn As New SqlConnection()
conn.ConnectionString = WebConfigurationManager.ConnectionStrings("TestDBConnectionString").ConnectionString
Using cmd As New SqlCommand("SELECT DISTINCT [FirstName] FROM [Employees]", conn)
conn.Open()
Using reader = cmd.ExecuteReader()
While reader.Read
FNlist = New ListItem()
FNlist.Value = reader("FirstName")
FNlist.Text = reader("FirstName")
DDLFirstName.Items.Add(FNlist)
End While
End Using
End Using
End Using
End Sub
Protected Sub FillLNDLL()
Dim LNlist As ListItem
Dim sel As New ListItem
sel.Text = "Please Select"
sel.Value = "*"
DDLLastName.Items.Add(sel)
Using conn As New SqlConnection()
conn.ConnectionString = WebConfigurationManager.ConnectionStrings("TestDBConnectionString").ConnectionString
Using cmd As New SqlCommand("SELECT DISTINCT [LastName] FROM [Employees]", conn)
conn.Open()
Using reader = cmd.ExecuteReader()
While reader.Read
LNlist = New ListItem()
LNlist.Value = reader("LastName")
LNlist.Text = reader("LastName")
DDLLastName.Items.Add(LNlist)
End While
End Using
End Using
End Using
End Sub
あなたはSQLでクエリをテストしましたが、読者がリーダー( "LastName")のNULL値を取得していないことを確認していますか?このエラーは、通常、nullをチェックせずに変数に値を設定しようとしたことを意味し、ヌル値を受け取りました。 –
エラーが発生するのはどの回線ですか? –
どのラインでエラーが表示されますか? – Etch