Member 11856456 Ответов: 1

Почему Источник привязки не может иметь отдельной функции?


Я пытаюсь привязать определенные поля к полям со списком и текстовым полям. На данный момент у меня возникла проблема с использованием оператора Select distinct from при создании источника привязки с использованием таблицы данных, созданной для заполнения источника данных. Я получаю данные, но не отдельные значения. Я получаю все значения, включая любые дубликаты данных типа.

Dim sqlconn2 As New SqlConnection("sqlstring")
     Dim da2 As New SqlDataAdapter("select distinct Id, county, [business name], [business license number], [business address] from businesses", sqlconn2)
     sqlconn2.Open()
     da2.SelectCommand.ExecuteNonQuery()
     Dim newdts As New DataTable
     da2.Fill(newdts)
     sqlconn2.Close()
     bs2.DataSource = newdts

     businessnamecombobox.DataSource = bs2
     businessnamecombobox.DisplayMember = "business name"
     businessnamecombobox.ValueMember = "business name"


Что я уже пробовал:

Я попытался использовать фильтр с bindingsource. BS2. filter, но он все еще не дает четких значений. Есть предложения?

1 Ответов

Рейтинг:
4

chaau

То distinct ключевое слово применяется ко всему набору столбцов, которые вы выбираете из таблицы. В вашем случае, если есть компании с одинаковыми названиями компаний в разных округах, то они также будут выбраны.

В вашем combobox вы не видите графств или другой связанной с ними информации, поэтому кажется, что она дублируется.

Вы можете либо опустить все остальные столбцы из инструкции select и получить из таблицы только имя busines:

Dim da2 As New SqlDataAdapter("select distinct [business name] from businesses", sqlconn2)


Или добавьте отображение дополнительных сведений, таких как округ, номер лицензии и т. д.

Если вы все еще хотите отобразить дополнительные сведения, но перечислить название компании один раз, вы можете использовать функцию окна:

select Id, county, [business name], [business license number], [business address] from 
(select Id, county, [business name], [business license number], [business address],
 row_number() OVER (partition by [business name] order by Id) rn
 from  businesses) a where rn = 1


Member 11856456

А как насчет объединения с bindingsource? Допустим, я делаю несколько операторов, чтобы сделать отдельные столбцы, могу ли я взять эти 4-5 операторов sql и поместить их в 1 bindingsource?

chaau

- да, можешь. Для этого можно использовать оконную функцию. Смотрите мое улучшенное решение

Karthik_Mahalingam

5