Ниже приведена моя попытка создать CheckedListBox, который будет показывать только доступные данные, поэтому, когда в одном из них будет указано значение, другие будут учитывать значение, указанное вначале, и отображать только данные, доступные со значением из первого установленного флажка. .
Public Class Form1
Dim main_value As String = Nothing
Dim groupfunction_value As String = Nothing
Dim form_value As String = Nothing
Dim type_value As String = Nothing
Dim variant_value As String = Nothing
Dim finish_value As String = Nothing
'Dim morb_value As String = Nothing
Dim where_statement As String = Nothing
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Fill_checkboxes_no_value()
End Sub
Public Sub Get_checkbox_values()
main_value = Nothing
groupfunction_value = Nothing
form_value = Nothing
type_value = Nothing
variant_value = Nothing
finish_value = Nothing
where_statement = Nothing
If Me.MainListBox.CheckedItems.Count <> 0 Then
For Each s As String In Me.MainListBox.CheckedItems
main_value = main_value & "'" & s & "',"
Next
main_value = main_value.Remove(main_value.LastIndexOf(","), 1)
End If
If Me.GrpFnctListBox.CheckedItems.Count <> 0 Then
For Each s1 As String In Me.GrpFnctListBox.CheckedItems
groupfunction_value = groupfunction_value & "'" & s1 & "',"
Next
groupfunction_value = groupfunction_value.Remove(groupfunction_value.LastIndexOf(","), 1)
End If
If Me.FormListBox.CheckedItems.Count <> 0 Then
For Each s2 As String In Me.FormListBox.CheckedItems
form_value = form_value & "'" & s2 & "',"
Next
form_value = form_value.Remove(form_value.LastIndexOf(","), 1)
End If
If Me.TypeListBox.CheckedItems.Count <> 0 Then
For Each s3 As String In Me.TypeListBox.CheckedItems
type_value = type_value & "'" & s3 & "',"
Next
type_value = type_value.Remove(type_value.LastIndexOf(","), 1)
End If
If Me.VariantListBox.CheckedItems.Count <> 0 Then
For Each s4 As String In Me.VariantListBox.CheckedItems
variant_value = variant_value & "'" & s4 & "',"
Next
variant_value = variant_value.Remove(variant_value.LastIndexOf(","), 1)
End If
If Me.FinishListBox.CheckedItems.Count <> 0 Then
For Each s5 As String In Me.FinishListBox.CheckedItems
finish_value = finish_value & "'" & s5 & "',"
Next
finish_value = finish_value.Remove(finish_value.LastIndexOf(","), 1)
End If
If main_value <> Nothing Then
where_statement = "column__24 IN (" & main_value & ") "
End If
If groupfunction_value <> Nothing Then
If where_statement = Nothing Then
where_statement = "column__26 IN (" & groupfunction_value & ") "
Else
where_statement = where_statement & "and column__26 IN (" & groupfunction_value & ") "
End If
End If
If form_value <> Nothing Then
If where_statement = Nothing Then
where_statement = "column__25 IN (" & form_value & ") "
Else
where_statement = where_statement & "and column__25 IN (" & form_value & ") "
End If
End If
If type_value <> Nothing Then
If where_statement = Nothing Then
where_statement = "column__30 IN (" & type_value & ") "
Else
where_statement = where_statement & "and column__30 IN (" & type_value & ") "
End If
End If
If variant_value <> Nothing Then
If where_statement = Nothing Then
where_statement = "column__31 IN (" & variant_value & ") "
Else
where_statement = where_statement & "and column__31 IN (" & variant_value & ") "
End If
End If
If finish_value <> Nothing Then
If where_statement = Nothing Then
where_statement = "column__21 IN (" & finish_value & ") "
Else
where_statement = where_statement & "and column__21 IN (" & finish_value & ") "
End If
End If
If where_statement <> Nothing Then
where_statement = " INNER JOIN SQL_Table_2 stk with (nolock) ON ext.column__03=stk.column_1 AND ext.column__04=stk.column_2 " &
"WHERE stk.make_or_buy='B' and " & where_statement
End If
End Sub
Public Sub Fill_checkboxes_with_value(main As Boolean, groupfunction As Boolean, form As Boolean, type As Boolean, variant_ As Boolean, finish As Boolean)
If main Then
Dim main_sql_str As String = "SELECT DISTINCT column__24 as main FROM SQL_Table ext with (nolock)" & where_statement & " ORDER BY column__24"
Dim main_ta As New SqlClient.SqlDataAdapter(main_sql_str, My.Settings.DBConnectionString)
Dim main_dt As New DataTable
main_ta.Fill(main_dt)
Me.MainListBox.Items.Clear()
For Each dr As DataRow In main_dt.Rows
Me.MainListBox.Items.Add(dr(0).ToString.Trim)
Next
main_ta.Dispose()
main_dt.Clear()
End If
If groupfunction Then
Dim groupfunction_sql_str As String = "SELECT DISTINCT column__26 as groupfunction FROM SQL_Table ext with (nolock)" & where_statement & " ORDER BY column__26"
Dim groupfunction_ta As New SqlClient.SqlDataAdapter(groupfunction_sql_str, My.Settings.DBConnectionString)
Dim groupfunction_dt As New DataTable
groupfunction_ta.Fill(groupfunction_dt)
Me.GrpFnctListBox.Items.Clear()
For Each dr As DataRow In groupfunction_dt.Rows
Me.GrpFnctListBox.Items.Add(dr(0).ToString.Trim)
Next
groupfunction_ta.Dispose()
groupfunction_dt.Clear()
End If
If form Then
Dim form_sql_str As String = "SELECT DISTINCT column__25 as form FROM SQL_Table ext with (nolock)" & where_statement & " ORDER BY column__25"
Dim form_ta As New SqlClient.SqlDataAdapter(form_sql_str, My.Settings.DBConnectionString)
Dim form_dt As New DataTable
form_ta.Fill(form_dt)
Me.FormListBox.Items.Clear()
For Each dr As DataRow In form_dt.Rows
Me.FormListBox.Items.Add(dr(0).ToString.Trim)
Next
form_ta.Dispose()
form_dt.Clear()
End If
If type Then
Dim type_sql_str As String = "SELECT DISTINCT column__30 as [type] FROM SQL_Table ext with (nolock)" & where_statement & " ORDER BY column__30"
Dim type_ta As New SqlClient.SqlDataAdapter(type_sql_str, My.Settings.DBConnectionString)
Dim type_dt As New DataTable
type_ta.Fill(type_dt)
Me.TypeListBox.Items.Clear()
For Each dr As DataRow In type_dt.Rows
Me.TypeListBox.Items.Add(dr(0).ToString.Trim)
Next
type_ta.Dispose()
type_dt.Clear()
End If
If variant_ Then
Dim variant_sql_str As String = "SELECT DISTINCT column__31 as variant FROM SQL_Table ext with (nolock)" & where_statement & " ORDER BY column__31"
Dim variant_ta As New SqlClient.SqlDataAdapter(variant_sql_str, My.Settings.DBConnectionString)
Dim variant_dt As New DataTable
variant_ta.Fill(variant_dt)
Me.VariantListBox.Items.Clear()
For Each dr As DataRow In variant_dt.Rows
Me.VariantListBox.Items.Add(dr(0).ToString.Trim)
Next
variant_ta.Dispose()
variant_dt.Clear()
End If
If finish Then
Dim finish_sql_str As String = "SELECT DISTINCT column__21 as finish FROM SQL_Table ext with (nolock)" & where_statement & " ORDER BY column__21"
Dim finish_ta As New SqlClient.SqlDataAdapter(finish_sql_str, My.Settings.DBConnectionString)
Dim finish_dt As New DataTable
finish_ta.Fill(finish_dt)
Me.FinishListBox.Items.Clear()
For Each dr As DataRow In finish_dt.Rows
Me.FinishListBox.Items.Add(dr(0).ToString.Trim)
Next
finish_ta.Dispose()
finish_dt.Clear()
End If
End Sub
Private Sub Fill_checkboxes_no_value()
Dim main_sql_str As String = "SELECT DISTINCT column__24 as main FROM SQL_Table ext with (nolock) " &
"INNER JOIN SQL_Table_2 stk with (nolock) ON ext.column__03=stk.column_1 AND ext.column__04=stk.column_2 " &
"WHERE stk.make_or_buy='B' ORDER BY column__24"
Dim main_ta As New SqlClient.SqlDataAdapter(main_sql_str, My.Settings.DBConnectionString)
Dim main_dt As New DataTable
main_ta.Fill(main_dt)
Me.MainListBox.Items.Clear()
For Each dr As DataRow In main_dt.Rows
Me.MainListBox.Items.Add(dr(0).ToString.Trim)
Next
main_ta.Dispose()
main_dt.Clear()
Dim groupfunction_sql_str As String = "SELECT DISTINCT column__26 as groupfunction FROM SQL_Table ext with (nolock) " &
"INNER JOIN SQL_Table_2 stk with (nolock) ON ext.column__03=stk.column_1 AND ext.column__04=stk.column_2 " &
"WHERE stk.make_or_buy='B' ORDER BY column__26"
Dim groupfunction_ta As New SqlClient.SqlDataAdapter(groupfunction_sql_str, My.Settings.DBConnectionString)
Dim groupfunction_dt As New DataTable
groupfunction_ta.Fill(groupfunction_dt)
Me.GrpFnctListBox.Items.Clear()
For Each dr As DataRow In groupfunction_dt.Rows
Me.GrpFnctListBox.Items.Add(dr(0).ToString.Trim)
Next
groupfunction_ta.Dispose()
groupfunction_dt.Clear()
Dim form_sql_str As String = "SELECT DISTINCT column__25 as form FROM SQL_Table ext with (nolock) " &
"INNER JOIN SQL_Table_2 stk with (nolock) ON ext.column__03=stk.column_1 AND ext.column__04=stk.column_2 " &
"WHERE stk.make_or_buy='B' ORDER BY column__25"
Dim form_ta As New SqlClient.SqlDataAdapter(form_sql_str, My.Settings.DBConnectionString)
Dim form_dt As New DataTable
form_ta.Fill(form_dt)
Me.FormListBox.Items.Clear()
For Each dr As DataRow In form_dt.Rows
Me.FormListBox.Items.Add(dr(0).ToString.Trim)
Next
form_ta.Dispose()
form_dt.Clear()
Dim type_sql_str As String = "SELECT DISTINCT column__30 as [type] FROM SQL_Table ext with (nolock) " &
"INNER JOIN SQL_Table_2 stk with (nolock) ON ext.column__03=stk.column_1 AND ext.column__04=stk.column_2 " &
"WHERE stk.make_or_buy='B' ORDER BY column__30"
Dim type_ta As New SqlClient.SqlDataAdapter(type_sql_str, My.Settings.DBConnectionString)
Dim type_dt As New DataTable
type_ta.Fill(type_dt)
Me.TypeListBox.Items.Clear()
For Each dr As DataRow In type_dt.Rows
Me.TypeListBox.Items.Add(dr(0).ToString.Trim)
Next
type_ta.Dispose()
type_dt.Clear()
Dim variant_sql_str As String = "SELECT DISTINCT column__31 as variant FROM SQL_Table ext with (nolock) " &
"INNER JOIN SQL_Table_2 stk with (nolock) ON ext.column__03=stk.column_1 AND ext.column__04=stk.column_2 " &
"WHERE stk.make_or_buy='B' ORDER BY column__31"
Dim variant_ta As New SqlClient.SqlDataAdapter(variant_sql_str, My.Settings.DBConnectionString)
Dim variant_dt As New DataTable
variant_ta.Fill(variant_dt)
Me.VariantListBox.Items.Clear()
For Each dr As DataRow In variant_dt.Rows
Me.VariantListBox.Items.Add(dr(0).ToString.Trim)
Next
variant_ta.Dispose()
variant_dt.Clear()
Dim finish_sql_str As String = "SELECT DISTINCT column__21 as finish FROM SQL_Table ext with (nolock) " &
"INNER JOIN SQL_Table_2 stk with (nolock) ON ext.column__03=stk.column_1 AND ext.column__04=stk.column_2 " &
"WHERE stk.make_or_buy='B' ORDER BY column__21"
Dim finish_ta As New SqlClient.SqlDataAdapter(finish_sql_str, My.Settings.DBConnectionString)
Dim finish_dt As New DataTable
finish_ta.Fill(finish_dt)
Me.FinishListBox.Items.Clear()
For Each dr As DataRow In finish_dt.Rows
Me.FinishListBox.Items.Add(dr(0).ToString.Trim)
Next
finish_ta.Dispose()
finish_dt.Clear()
End Sub
Private Sub MainListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles MainListBox.SelectedIndexChanged
Get_checkbox_values()
Fill_checkboxes_with_value(False, True, True, True, True, True)
End Sub
Private Sub GrpFnctListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles GrpFnctListBox.SelectedIndexChanged
Get_checkbox_values()
Fill_checkboxes_with_value(True, False, True, True, True, True)
End Sub
Private Sub FormListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles FormListBox.SelectedIndexChanged
Get_checkbox_values()
Fill_checkboxes_with_value(True, True, False, True, True, True)
End Sub
Private Sub TypeListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TypeListBox.SelectedIndexChanged
Get_checkbox_values()
Fill_checkboxes_with_value(False, True, True, False, True, True)
End Sub
Private Sub VariantListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles VariantListBox.SelectedIndexChanged
Get_checkbox_values()
Fill_checkboxes_with_value(False, True, True, True, False, True)
End Sub
Private Sub FinishListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles FinishListBox.SelectedIndexChanged
Get_checkbox_values()
Fill_checkboxes_with_value(False, True, True, True, True, True)
End Sub
End Class
Это первый раз, когда я создаю что-то подобное, и я не знаю, есть ли лучшие методы для достижения моего результата?
Проблема с текущим кодом заключается в том, что флажки очищаются и пополняются каждый раз, когда значение проверяется в другом флажке, и поэтому оно теряет проверенное значение.