동적으로 채우거나 다시 채우려는 두 개의 DropDownLists가 있습니다. 페이지로드시 두 DDL 모두 동일한 테이블의 각 열의 고유 한 값으로 채워집니다. 두 DLL 중 선택한 항목이 변경된 경우 변경 사항을 반영하기 위해 다른 DDL의 내용을 원합니다 (GridView에서 필터링의 양식을 만드는 것입니다).개체 참조가 개체의 인스턴스로 설정되지 않았습니다. VB.net
아래 코드의 논리는 기본적으로 DDLFirstName이 변경되면 DDLLastName이 이전에 변경되었는지 확인합니다 (변경되지 않은 경우 "선택하십시오"라고 표시해야 함). 변경되지 않은 경우 "%"값을 변수에 넣으십시오 (쿼리 문자열에 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에서 쿼리를 테스트 해봤습니까? 독자가 독자 ("성")에 NULL 값을 가져 오지 않았는지 확인하십시오. 이 오류는 일반적으로 null을 확인하지 않고 변수를 채우려고 시도했음을 의미하며 null 값을 받았습니다. –
오류가 발생한 줄은 무엇입니까? –
어떤 라인에서 오류가 발생합니까? – Etch