Уважаемые, подскажите, возможно ли и как, фильтровать уже отфильтрованный набор строк в DataView при многократном последовательном применении RowFilter. Вот рабочий код, только не могу понять как применить новый (Button2_Click) rowfilter к уже отфильтрованной (Button1_Click) таблице. При применении второго фильтра к результатам первой фильтрации конечный результат получается что фильтрует из исходной таблице,а нужно чтоб фильтровало из полученной таблицы (Button1_Click) CheckedListBox1 - наполняется из подключенной базы данных CheckedListBox2 - после применения первой фильтрации Что касается кода, то что в коментах - это эксперименты (неудачные в конечном получение результата, но сами по себе рабочие). Код | Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cmdString As String = "SELECT * FROM Компании" Dim conStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\projeckt\MyDB.mdb" Dim myConnection As OleDbConnection = New OleDbConnection(conStr) myConnection.Open() Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmdString, conStr) dataSet1 = New DataSet() da.Fill(dataSet1, "Table1") myConnection.Close() myConnection.Dispose() Dim DV As New DataView(dataSet1.Tables("Table1")) Dim sb As New StringBuilder() ' формирование запроса на фильтрацию в таблице For i = 0 To CheckedListBox1.CheckedItems.Count - 1 If sb.Length > 0 Then sb.Append(" OR ") End If sb.AppendFormat(" [Country] = '" & CheckedListBox1.CheckedItems(i) & "'") Next 'dataSet1.Tables("Table1").DefaultView.RowFilter = sb.ToString() 'dataSet1.Tables("Table1").DefaultView.Sort = "Country" DV.RowFilter = sb.ToString DV.Sort = "Country" DataGridView1.DataSource = DV
' создание отфильтрованой таблицы из просмоторщика таблиц Dim tbl2 As DataTable = DV.ToTable("Table2", True, New String() {"Description", "Country", "Reuters", "Тикер1", "Тикер2", "Страна", "Индустрия", "Сектор", "Валюта котировок", "Капитализация", "Размерность капитализации"}) Console.WriteLine("TableName: {0}", tbl2.TableName) Console.WriteLine("Rows:") For Each col As DataColumn In tbl2.Columns Console.WriteLine(" {0}", col.ColumnName) Next Console.WriteLine() Console.WriteLine("Rows:") For Each row As DataRow In tbl2.Rows Console.WriteLine("{0}, {1}", row("Description"), row("Country"), row("Reuters"), row("Тикер1"), row("Тикер2"), row("Страна"), row("Индустрия"), row("Сектор"), row("Валюта котировок"), row("Капитализация"), row("Размерность капитализации")) Next
CheckedListBox3.Items.Clear() CheckedListBox2.Text = "" CheckedListBox2.Items.Clear() CheckedListBox2.BeginUpdate() Try ' наполнение контрола из столбца таблицы For i = 0 To DV.Table.Rows.Count - 1 CheckedListBox2.Items.Add(DV.Item(i).Item("Индустрия").ToString) Next Catch ex As Exception End Try CheckedListBox2.Sorted = True CheckedListBox2.EndUpdate() CheckedListBox2.CheckOnClick = True Try ' удаление повторяющиихся элементов в контроле m33: For b As Integer = 1 To CheckedListBox2.Items.Count - 1 If CheckedListBox2.Items.Item(b - 1).ToString = CheckedListBox2.Items.Item(b).ToString Then CheckedListBox2.Items.RemoveAt(b - 1) GoTo m33 End If Next b Catch ex As Exception End Try Button2.Enabled = True ' активация кнопки CheckedListBox2.Enabled = True ' активация контрола
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' формирование запроса на фильтрацию в таблице Dim sb As New StringBuilder() For i = 0 To CheckedListBox2.CheckedItems.Count - 1 If sb.Length > 0 Then sb.Append(" OR ") End If sb.AppendFormat(" Индустрия = '" & CheckedListBox2.CheckedItems(i) & "'") Next 'dataSet1.Tables("Table1").DefaultView.RowStateFilter = DataViewRowState.CurrentRows
'Dim ds1 As New DataSet 'Dim dt As New DataTable("Table2") 'dt = ds1.Tables("Table2") 'Dim DV2 As New DataView(ds1.Tables("Table2")) 'DV2 = New DataView(ds1.Tables("Table2"))
Dim DV2 As New DataView(dataSet1.Tables("Table1")) DV2.RowFilter = sb.ToString() DV2.Sort = "Индустрия" DataGridView1.DataSource = DV2 'DV2.ToTable("Table3")
CheckedListBox3.Text = "" CheckedListBox3.Items.Clear() CheckedListBox3.BeginUpdate() Try ' наполнение контрола из столбца таблицы For i = 0 To DV2.Table.Rows.Count - 1 CheckedListBox3.Items.Add(DV2.Item(i).Item("Сектор").ToString) Next Catch ex As Exception End Try CheckedListBox3.Sorted = True CheckedListBox3.EndUpdate() CheckedListBox3.CheckOnClick = True Try ' удаление повторяющиихся элементов в контроле m33: For b As Integer = 1 To CheckedListBox3.Items.Count - 1 If CheckedListBox3.Items.Item(b - 1).ToString = CheckedListBox3.Items.Item(b).ToString Then CheckedListBox3.Items.RemoveAt(b - 1) GoTo m33 End If Next b Catch ex As Exception End Try Button3.Enabled = True ' активация кнопки CheckedListBox3.Enabled = True ' активация контрола End Sub
|
|