powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / 2 Combo box dataset filter (pomogite novichku)
5 сообщений из 5, страница 1 из 1
2 Combo box dataset filter (pomogite novichku)
    #32659148
Nilsuha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Perehozhu s access na SQL server i GUI perepisyvaju pod vb.net
Voprosov t'ma... Po topikam iskal, no nichego ne nashol... naverno ploho iskal, t.k. vopros etot voznikal naberno u mnogih:

jest' forma "OrdersSQL", na nej 2 combo box. 1j: "SendTo", 2oj: "CustomerID". Dannyje berutsja s SQL servera tablica "Orders", a combo boxy zapolnjajutsja iz tablic: "Send Invoice" i "OurCustomers" sootvetstvenno.

Vopros prostoj: Kak vybiraja znachenije 1-go comba boxa vo 2om combobox otobrazhalis' tolko sootvetstvujushije znachenija.

Privozhu kod do chego sumel dodumatsja:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
 'Zagruzka formy 
Private Sub OrdersSQL_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

 'SqlDataAdapter1, DsOrdersSql2 - dataadapter i dataset sozdannyj wizardom, zapolnjajet osnovnuju formu OrdersSQL 

        SqlDataAdapter1.Fill(DsOrdersSql2)
        ComboBoxFill()
End Sub

 'zalivka combo boxov 

Private Sub ComboBoxFill()
        Dim cmdString As String = "Select * from [send invoice]"
        Dim connString As String = "data source=server2000;initial catalog=GriffinDB;integrated security=SSPI;persist security info=False;workstation id=SERVER2000;packet size=4096"
        Dim myConnection As SqlClient.SqlConnection = New SqlClient.SqlConnection(connString)

        myConnection.Open()

        Dim da As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(cmdString, myConnection)
        Dim dataSet1 As DataSet = New DataSet()
        da.Fill(dataSet1, "[Send invoice]")

        With Me.SendTo
             .DataSource = dataSet1.Tables("[Send invoice]")
             .ValueMember = "ID"
             .DisplayMember = "Send to"
         End With

       Me.SendTo.DataBindings.Add("selectedvalue", DsOrdersSql2, "Orders.Company")

         'CustomerID combo box 

         cmdString = "Select * from OurCustomers"

        Dim da1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(cmdString, myConnection)
        Dim dataSet2 As DataSet = New DataSet()
        da1.Fill(dataSet2, "OurCustomers")

        With Me.CustomerID
            .DataSource = dataSet2.Tables("OurCustomers")
            .ValueMember = "ID"
            .DisplayMember = "CompName"
        End With

        Me.CustomerID.DataBindings.Add("selectedvalue", DsOrdersSql2, "Orders.CustomerOrderID")

myConnection.Close()
Na etom etape vsje rabotajet, no combo box 2 zapolnen vsjemi zapisjami bez filtracii v zamisimosti ot vybrannogo znachenija v combobox 1...

teper' mudrju s samoj filtracijej... nakopal, chto nuzhno stavit' etu samuju filtraciju na sobytije SelectedIndexChanged... verno li?

pytajus' zamutit' kod:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub SendTo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SendTo.SelectedIndexChanged

Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand()
    Dim connString As String = "data source=server2000;initial catalog=GriffinDB;integrated security=SSPI;persist security info=False;workstation id=SERVER2000;packet size=4096"
    Dim myConnection As SqlClient.SqlConnection = New SqlClient.SqlConnection(connString)

        cmd.Connection = myConnection
        cmd.CommandType = CommandType.Text

    Dim da1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter()
    Dim prm As SqlClient.SqlParameter = New SqlClient.SqlParameter()

        cmd.CommandText = "Select * from OurCustomers where CompIndent = @MyParam"

        da1.SelectCommand = cmd

        cmd.Parameters.Add("@MyParam", SqlDbType.Int).Value = Me.SendTo.SelectedValue

        ' MsgBox(Me.SendTo.SelectedIndex) 
    Dim dataSet2 As DataSet = New DataSet()
        da1.Fill(dataSet2, "OurCustomers")

    End Sub

pojavljaetsja oshibka:
"An unhandled exception of type 'System.InvalidCastException' occurred in system.data.dll

Additional information: Object must implement IConvertible."

Proveril hod vypolnenija programmy. sobytije SelectedIndexChanged zapuskajetsja kazhdyj raz kogda vypolnjajetsja strochki
Код: plaintext
1.
2.
3.
4.
5.
        With Me.SendTo
             .DataSource = dataSet1.Tables("[Send invoice]")
             .ValueMember = "ID"
             .DisplayMember = "Send to"
         End With
t.e. neskolkoraz... prichom pervyj raz proginjaja SelectedIndexChanged vsje prohodit bez oshibki, a 2j vylezajet vyshe ukazzannaja beda.

Izvinite, chto lainicej. i za dlinnoje pismo... no mozhet u kogo hvatit sil razobratsja s kodom, budu ochen' priznatelen za ljubuju pomosh. Mozhet podskazhite kak pravilno realizovyvat' svjazzanyje comboboxy? ja uzhe nemalo zaparilsja...

P.S. pishu pod windows.forms (izuchaju samostojatelno, 2 nedeli.. s nulja... ne skem posovetovatsja) jesli u kogo jest' pohozhaja gotovaja forma mozheno skinut' na nilsuha@mail.ru... spasibo.
...
Рейтинг: 0 / 0
2 Combo box dataset filter (pomogite novichku)
    #32659174
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению вникать особо сейчас нет времени
Но я так понял вас интересует фильтрация данных. А для фильтрации почти идеально подходит DataView . DataView ComboBox'а можно вернуть через CurrencyManager .

Выделенные мною слова - ключевые слова для поиска по форуму.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
2 Combo box dataset filter (pomogite novichku)
    #32659257
Nilsuha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
budu iskat'... no... mozhet pri voznikshej vozmozhnosti poprobujete razobratsja... :) ?
...
Рейтинг: 0 / 0
2 Combo box dataset filter (pomogite novichku)
    #32660398
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь я бы делал через DataView (таким образом необходимости в повторном запросе к БД с параметром нет)

Я так понял вам необходимо отфильтровать записи в таблице OurCustomers
по критерию "CompIndent = SendTo.ID" ? где SendTo.ID - текущий выбранный ID combobox'а SendTo?
...
Рейтинг: 0 / 0
2 Combo box dataset filter (pomogite novichku)
    #32679542
Nilsuha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Etot etap vrode proiden. Sdelal tak (mozhet komu prigoditsja):

Private Sub OrdersSQL_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

SqlDataAdapter1.Fill(DsOrdersSql2)
ComboBoxFill()
End Sub

Private Sub ComboBoxFill()
Dim cmdString As String
Dim connString As String = "data source=server2000;initial catalog=GriffinDB;integrated security=SSPI;persist security info=False;workstation id=SERVER2000;packet size=4096"
Dim myConnection As SqlClient.SqlConnection = New SqlClient.SqlConnection(connString)
myConnection.Open()

'+++++++++++++++ SendToComboBox ++++++++++++++++++++++

cmdString = "Select * from [Send invoice]"
Dim da1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(cmdString, myConnection)
Dim DataView1 As New DataView()
Dim dataSet1 As DataSet = New DataSet()
da1.Fill(dataSet1, "[Send invoice]")

flag = False

With Me.SendTo
.DataSource = dataSet1.Tables("[Send invoice]")
.ValueMember = "ID"
.DisplayMember = "Send to"
End With

Me.SendTo.DataBindings.Add("selectedvalue", DsOrdersSql2, "Orders.Company")

'+++++++++++++++ CustomerComboBox ++++++++++++++++++++++

cmdString = "Select * from OurCustomers"

Dim da2 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(cmdString, myConnection)
da2.Fill(dataSet2, "OurCustomers")

With Me.CustomerID
.DataSource = dataSet2.Tables("OurCustomers")
.ValueMember = "ID"
.DisplayMember = "CompName"

End With

Me.CustomerID.DataBindings.Add("selectedvalue", DsOrdersSql2, "Orders.CustomerOrderID")

flag = True
myConnection.Close()
end sub

Private Sub SendTo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SendTo.SelectedIndexChanged

If flag = True Then

Dim dv As DataView
dv = New DataView()
With dv
.Table = dataSet2.Tables("OurCustomers")
.RowFilter = "CompIndent = " & Me.SendTo.SelectedValue
.Sort = "CompName Asc"
End With

With Me.CustomerID
.DataSource = dv
.ValueMember = "ID"
.DisplayMember = "CompName"
End With
End If


End Sub



Teper' drugaja problema:
Delajem novyju zapis'... Vybirajem v pervom combobox(send to) ljuboje znachenije... vo vtorom comboboxe avtomaticheski pojavljajetsja pervoje iz otsortirovannyh znachenij, a nado chto by nichego ne vybirlos'(byla pustaja strochka), poka user sam ne vyberet. Kak eto sdelat'? Na selectedvaluechanged postavil me.customerid.selectedvalue = -1. Ne pomogajet... ili me.customerid.text = "" nichego ne pomogajet... POMOGITE... jesli sdes' voobshe mozhno naiti pomosh...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / 2 Combo box dataset filter (pomogite novichku)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]