Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многократный RowFilter vb.net, Многократный RowFilter vb.net 
:(
    Опции темы
timon12
Дата 11.10.2010, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.10.2010

Репутация: нет
Всего: нет



Уважаемые, подскажите, возможно ли и как, фильтровать уже отфильтрованный набор строк в 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


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.