Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
1

DataTable с условием выборки как источник данных для Combobox

07.04.2019, 17:35. Показов 5749. Ответов 50
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Коллеги, приветствую!

Есть TestDataTable с данными.
Необходимо заполнить Combobox1 из TestDataTable с условием, что столбец Pressure_for_search >= цифры из Textbox1
Вот так попробовал, не захотел код работать.
VB.NET
1
2
3
4
5
    Private Sub TextBox1_Validated(sender As Object, e As EventArgs) Handles TextBox1.Validated
        Dim strSelectText As String = "Pressure_for_search >= " & TextBox1.Text
        ComboBox1.DataSource = Form_Main.TestDataTable.Select(strSelectText)
        ComboBox1.DisplayMember = "Main_tube_type"
    End Sub
И никак не придумаю, как решить задачу. Вся надежда на Вас.

С уважением, Алексей.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2019, 17:35
Ответы с готовыми решениями:

Запрос с заполнением данных( с двойным условием выборки)
Доброго времени суток. Есть задача следующего плана: Составляется документ "Разность...

Как для Combobox, который сделан в UserControl, установить источник привязки List<string>
Здравствуйте. Подскажите пожалуйста такую вещь. Я сделал Combobox в UserControl. Затем я программно...

Фильтр данных в ComboBox + DataTable
Дано: 2 Combobox, 1 DataTable. DataTable является источником данных для Combobox. DataTable...

FoxPro как источник данных для PHP
Еарод препод задал создате базу в FoxPro и создать PHP страницу которая будет брать инфу из этой...

50
1978 / 1411 / 366
Регистрация: 26.06.2017
Сообщений: 4,017
07.04.2019, 19:46 2
Попробуйте так:
VB.NET
1
Dim strSelectText As String = "Pressure_for_search >= '" & TextBox1.Text.ToString & "'"
0
4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
08.04.2019, 13:46  [ТС] 3
Не работает. Вот полный код формы (уже с другой таблицей пробую):
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Class FormDebug
    Dim DataTableTest As New Data.DataTable
    Private Sub FormDebug_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DataTableTest = Form_Main.DTCombobox40
        ComboBox1.DataSource = DataTableTest
        ComboBox1.DisplayMember = "Main_tube_type"
    End Sub
 
    Private Sub TextBox1_Validated(sender As Object, e As EventArgs) Handles TextBox1.Validated
        If TextBox1.Text <> "" Then
            ComboBox1.DataSource = DataTableTest.Select("Pressure_for_search >= '" & TextBox1.Text & "'")
            ComboBox1.DisplayMember = "Main_tube_type"
        End If
    End Sub
End Class
При запуске формы список отображается корректно.
Вводу цифру в Textbox и получаю вот такой результат (скрин приложен). Пробовал код и с применением знака ' и без него.
Прошу помощи

С уважением, Алексей.
Миниатюры
DataTable с условием выборки как источник данных для Combobox  
0
4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
08.04.2019, 14:27  [ТС] 4
Коллеги, тогда мне совет нужен. Посодействуйте.
DataTable содержит копию таблицы из базы данных. Получаю я ее, естественно, через запрос к базе. Далее этот DataTable указан в качестве DataSource для Combobox
Но в некоторых случаях мне нужно, что бы в Combobox показывались не все строки, а выбранные по фильтру.
Сейчас я делаю новый запрос в базу с командой SQL для выборки данных. Но это открытие базы, запрос,получение данных, закрытие базы. Хотя вся необходимая информация уже есть в виде копии таблицы из базы.
Вот я и пытаюсь не обращаться лишний раз к базе, а отфильтровать нужную информацию из существующей копии.
Как это можно сделать?
0
256 / 209 / 52
Регистрация: 01.08.2016
Сообщений: 815
08.04.2019, 15:09 5
Allleksey, javascript:insertnick('Polyana1997','-1'); В данной теме есть хороший пример по организации фильтра выбора из базы данных от ovva
0
4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
08.04.2019, 15:14  [ТС] 6
Цитата Сообщение от andrsh Посмотреть сообщение
фильтра выбора из базы данных
С фильтром для выбора из базы данных у меня проблем нет. Просто хочу уйти от постоянного обращения к базе. Дело в том, что база находится не на локальном компьютере, а на удаленном. А на форме большое количество Combobox, наполнение которых зависит друг от друга. По этому изменение значения одного из них приводит к необходимости провести до 10 обращений к удаленной базе. Это большие временные затраты, хотя все данные уже есть на локальном компьютере. Вот в чем идея - уйти от обращений к удаленной базе и пользоваться копиями таблиц, находящихся в DataTable.
0
256 / 209 / 52
Регистрация: 01.08.2016
Сообщений: 815
08.04.2019, 15:49 7
Allleksey, создать массив из строк по значению в столбце ID и записать в комбобокс. Только перед каждой записью комбобокс очищать.
VB.NET
1
Dim rows=MyTable.Select("ID=3")
0
4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
08.04.2019, 15:58  [ТС] 8
Цитата Сообщение от andrsh Посмотреть сообщение
создать массив из строк по значению в столбце ID и записать в комбобокс
Была такая мысль. Пока не решил задачку.
Массив содержит уже "усеченную" таблицу в соответствии с выборкой. Но все равно в каждой строке может быть несколько столбцов. Как указать, какой именно из столбцов массива должен отображаться в списке? Что указать в DisplayMember?
VB.NET
1
2
            ComboBox1.DataSource = Massiv
            ComboBox1.DisplayMember = ???????
0
256 / 209 / 52
Регистрация: 01.08.2016
Сообщений: 815
08.04.2019, 16:13 9
Allleksey, Тогда можно сделать по другому:
1. Создать массив который выбран по определенному фильтру
2. записать его в другую дататабле
3 Из дататабле столбцы записать в комбобоксы. Для каждой колонки свой комбобокс
Если я правильно понял твою поставленную задачу то я бы делал таким бы образом
0
4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
08.04.2019, 16:18  [ТС] 10
Вот тут бы конкретику, выраженную кодом.
0
256 / 209 / 52
Регистрация: 01.08.2016
Сообщений: 815
08.04.2019, 16:24 11
Allleksey, Это я просто ход своих мыслей озвучил Код попробую написать. Скажи правильно я задачу понял или нет?
0
4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
08.04.2019, 16:32  [ТС] 12
Описываю задачу подробно
Есть DataTable, в котором находится копия таблицы из базы (таблица во вложении)
Этот DataTable является источником для Combobox1
VB.NET
1
2
Combobox1.datasourse=DataTable
Combobox1.DisplayMember = "Main_tube_type"
Далее мне надо из DataTable выбрать только те строки, в которых столбец Pressure_for_search >= 50
И вот теперь эти выбранные строки должны быть источником данных для Combobox1 (все тот же столбец Main_tube_type)

Надеюсь теперь понятно описал задачу.
Вложения
Тип файла: xlsx пример таблицы.xlsx (8.3 Кб, 3 просмотров)
0
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,518
08.04.2019, 17:02 13
Allleksey, попробуйте так
VB.NET
1
2
3
Dim rows() As DataRow = DataTableTest.Select("Pressure_for_search > 50")
 Dim lst = (From f In rows Select f.Item("Main_tube_type")).ToList
 ComboBox1.DataSource = lst
0
258 / 199 / 49
Регистрация: 18.12.2015
Сообщений: 416
08.04.2019, 21:52 14
Лучший ответ Сообщение было отмечено Allleksey как решение

Решение

Allleksey,
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    
    Private DT As DataTable = New DataTable
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DT.Columns.Add(New DataColumn() With {.ColumnName = "Main_tube_type"})
        DT.Columns.Add(New DataColumn() With {.ColumnName = "Pressure_for_search"})
        For i = 1 To 15
            DT.Rows.Add({"Текст" & i, 10 * i})
        Next
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim DTS As New DataTable
        DTS = DT.Copy
        DTS.DefaultView.RowFilter = "(Convert([Pressure_for_search],System.String) >= 50)"
        DTS = DTS.DefaultView.ToTable
        Dim str As String = Nothing
        For Each r In DTS.Rows
            str += r("Main_tube_type") & vbTab & r("Pressure_for_search") & vbCrLf
        Next
        MsgBox(str)
    End Sub
1
256 / 209 / 52
Регистрация: 01.08.2016
Сообщений: 815
08.04.2019, 22:52 15
Jungl, Вот только в комбобос не получается занести str. Никак не получается получить текстовые строчки из дататабле и занести их в комбобос. С MsgBox вопрос решается проще.
0
258 / 199 / 49
Регистрация: 18.12.2015
Сообщений: 416
08.04.2019, 23:01 16
andrsh, не вижу проблемы
VB.NET
1
2
        ComboBox1.DataSource = DTS
        ComboBox1.DisplayMember = "Main_tube_type"
0
256 / 209 / 52
Регистрация: 01.08.2016
Сообщений: 815
08.04.2019, 23:08 17
Junglда и ошибку ваш код выдает : "Невозможно выполнить операцию ">=" над System.String и System.Int32."
0
258 / 199 / 49
Регистрация: 18.12.2015
Сообщений: 416
08.04.2019, 23:11 18
andrsh, каков пример, такое и решение.
Что мешает разобраться в этой строке?
VB.NET
1
(Convert([Pressure_for_search],System.String)
0
256 / 209 / 52
Регистрация: 01.08.2016
Сообщений: 815
08.04.2019, 23:16 19
Jungl, Извиняюсь все ОК это я ошибся
0
4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
09.04.2019, 07:09  [ТС] 20
Если кому то интересно, то результирующий код получился такой (добавил 2 фильтра)
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
    Sub FillCB()
    Sub FillCB()
        If TextBox1.Text <> "" Then
            Dim DataTableTest As New Data.DataTable
        DataTableTest = Form_Main.DTCombobox40
        Dim strSelectComand As String = "Pressure_for_search >= " & TextBox1.Text
            DataTableTest.DefaultView.RowFilter = "(Convert([Pressure_for_search],System.String) >= " & TextBox1.Text & " AND Convert([Main_tube],System.String) = '" & ComboBox2.Text & "')"
            DataTableTest = DataTableTest.DefaultView.ToTable
            ComboBox1.DataSource = DataTableTest
            ComboBox1.DisplayMember = "Main_tube_type"
        End If
    End Sub
    End Sub
0
09.04.2019, 07:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2019, 07:09
Помогаю со студенческими работами здесь

Dictionary как источник данных для dataGridView
Здравствуйте! Можно ли для dataGridView в качестве источника данных использовать Dictionary? Если...

Как задать источник данных для отчета из кода?
Подскажите как задать в VB2010 источник данных для отчета из кода. На форме имеется грид,...

SQL запрос как источник для данных в форме
Все. не могу больше. не допирает до меня, дятел я, пните в правильном направлении, плиз. Дано:...

Источник значений для comboBox из удобной bytesroad.netsuit
Здравствуйте. Сделал &quot;Project&quot; -&gt; &quot;Add reference&quot; -&gt; &quot;BytesRoad.Net.Ftp.dll,...

Как исправить недопустимый источник данных для элемента управления?
Как исправить недопустимый источник данных для элемента управления?

Как проверить две выборки по критерию хи квадрат (есть функция chi2gof но она для одной выборки)
как проверить две выборки по критерию хи квадрат (есть функция chi2gof но она для одной выборки)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru