combobox ohne duplikate aus dgv füllen
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.
-
-
- du kannst die Combo an ein DataView binden, welches mit LinqToDataset erzeugt wurde, weil Linq unterstützt das Distinct - Schlüsselwort.
- Aber bei 30000 Einträgen, mw. reduziert auf 1000 - wer will aus einer Combo mit 1000 Einträge was raussuchen?
- Bei korrekter Datenmodellierung entstünden übrigens gar keine Duplikat-Werte in den Datensätzen.
- du kannst die Combo an ein DataView binden, welches mit LinqToDataset erzeugt wurde, weil Linq unterstützt das Distinct - Schlüsselwort.
-
ErfinderDesRades schrieb:
Bei korrekter Datenmodellierung entstünden übrigens gar keine Duplikat-Werte in den Datensätzen.
Ich habe eine tables, in dem 30000 Artikel sind, viele dieser Artikel habne den gleichen Preis.
zb 10000 haben 10€
20000 haben 20€
ich möchte nun ein Auswahlfeld füllen, wo ich dann 10 und 20 zur auswahl habe.
Natürlich kenne ich nicht den genauen inhalt der Tabelle, deswegen muss ich ja die duplikate rausfiltern.
Ich werde mir aber mal das mit dem Linq anschauen.
Thx"Mann" lernt mit seinen Projekten. -
wäre es da nicht sinniger, eine Combo mit PreisBereichen anzubieten?
Kommt halt drauf an, wofür die Combo gut sein soll.
evtl. braucht man sogar 2 Combos (von - bis), oder man legt Preisbereiche mit NumericUpdowns fest. -
Das Beispiel mit den Preisen hat nichts direkt mit meiner DB zu tun.
Es ging nur um das Beispiel.
Ich werde mir auf jeden fall die Möglichkeit mit Linq anschauen.
Gibt es es noch eine Alternative, mit der Ich halt eine Spalte einlese und jeweils nur einmal einen Wert oder Begriff in eine Liste schreibe."Mann" lernt mit seinen Projekten. -
-
kiter20 schrieb:
Das Beispiel mit den Preisen hat nichts direkt mit meiner DB zu tun.
Es ging nur um das Beispiel.
Ohne realere Infos bleibts halt bei der Allgemein-Aussage: Ordentliche Datenmodellierung erübrigt üblicherweise Daten-Dubletten. -
ErfinderDesRades schrieb:
Mit anderen Worten: Du verarschst mich
Ich habe nur versucht ein Beispiel zu finden, mit dem jeder etwas anfangen kann. (naja, ist wohl daneben gegangen)
Dann werde Ich es mal mit mehr details versuchen um auch zu zeigen, dass es dort doppelte eintrgäge geben kann.
Hier habe Ich ein screenshot von Meiner Tabelle
Ich bekomme oben in der Box "Filter" jeweil die columns namen angezeigt.
Dann wähler Ich einen operator aus und zu guter letzt kommt die Liste die Ich mit einer auswahl füllen will.
Wenn ich also die column "Wkz" auswähle, soll in der Liste dann '1011050' und '1011110' aufgelistet werden.
Oder bei "ParameterNamen" dann dementsprechend 'Ausreumen' 'Radius' 'Sprühmittel' etc. wie man Bildlauf sehen, kommen dort noch einige Parameter, welche sich aber immer wieder wiederholen.
Die Spalte "ID" ist uniq und über die kann Ich nachher auch in der DB änderrungen vornehmen.
Hier habe Ich auch nochmal das Sub zum einlesen der Daten.
Spoiler anzeigen
VB.NET-Quellcode
- Form1.dgvMain.Columns.Clear()
- 'Profildaten lesen
- Dim con As New OleDbConnection
- Dim cmd As New OleDbCommand
- Dim reader As OleDbDataReader
- Dim table As New DataTable
- con.ConnectionString =
- "Provider=Microsoft.Jet.OLEDB.4.0;" &
- "Data Source=" & (Path.Combine(PfadDatenbank, "Profildatenbank.mdb"))
- cmd.Connection = con
- cmd.CommandText = " SELECT [NC-ParameterListe].IDParameterName," &
- " [NC-ParameterNamen].ParameterName, [NC-ParameterListe].Wert, [NC-ParameterListe].IDParameter, [NC-ParameterListe].ID," &
- " Bearbeitungsdaten.BNr, Bearbeitungsdaten.Wkz, Bearbeitungsdaten.YPos, Bearbeitungsdaten.ZPos, ProfilListe.Profilname" &
- " FROM ((([NC-ParameterListe]" &
- " INNER JOIN [NC-ParameterNamen] ON [NC-ParameterListe].IDParameterName = [NC-ParameterNamen].IDParameterName)" &
- " INNER JOIN Bearbeitungsdaten ON [NC-ParameterListe].IDParameter = Bearbeitungsdaten.IDParameter)" &
- " INNER JOIN ProfilListe ON Bearbeitungsdaten.IDProfilname = ProfilListe.IDProfilname)" & FilterLesen & ""
- Try
- con.Open()
- reader = cmd.ExecuteReader()
- table.Clear()
- table.Reset()
- table.Load(reader)
- Form1.dgvMain.DataSource = table
- reader.Close()
- con.Close()
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- Form1.dgvMain.Columns("YPos").DefaultCellStyle.BackColor = Color.SkyBlue
- Form1.dgvMain.Columns("ZPos").DefaultCellStyle.BackColor = Color.SkyBlue
- Form1.dgvMain.Columns("BNr").DefaultCellStyle.BackColor = Color.SkyBlue
- Form1.dgvMain.Columns("Wkz").DefaultCellStyle.BackColor = Color.SkyBlue
- Form1.dgvMain.Columns("Profilname").DefaultCellStyle.BackColor = Color.SkyBlue
- Form1.dgvMain.Columns("ParameterName").DefaultCellStyle.BackColor = Color.SkyBlue
- 'Form1.dgvMain.Columns("IDParameterName").Visible = False
- 'Form1.dgvMain.Columns("ID").Visible = False
- 'Form1.dgvMain.Columns("IDParameter").Visible = False
- Form1.dgvMain.Columns("YPos").ReadOnly = True
- Form1.dgvMain.Columns("ZPos").ReadOnly = True
- Form1.dgvMain.Columns("BNr").ReadOnly = True
- Form1.dgvMain.Columns("Wkz").ReadOnly = True
- Form1.dgvMain.Columns("Profilname").ReadOnly = True
- Form1.dgvMain.Columns("ParameterName").ReadOnly = True
- data_ready_ProfilListe = True
- Auswahlfelder_füllen()
- End Sub
"Mann" lernt mit seinen Projekten.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kiter20“ ()
-
Wassich sage: eine Frage der Datenmodellierung.
Wkz ist glaub die "WerkstoffKennziffer" verschiedener Werkstoffe (ich kenn sowas von Stahl-Legierungen), und eine ordentliches Datenmodell täte die Werkstoffe in einer extra-Tabelle vorhalten.
Die Tabelle vom Screenshot würde auf diese Werkstoffe verweisen - evtl. könnte man ausnahmsweise die Wkz gleich als PrimKey hernehmen.
Das DGV enthielte also eine ComboboxColumn, deren Einträge an die Wkz-Tabelle gebunden wären - ein Joining-View halt, wie etwa in vier Views erwähnt, oder in "Joining-View" auf Movie-Tuts vorgeturnt. -
Keine Ahnung wie Ich das beschreiben soll. Aber irgendwie versteht Ihr das falsch (denke Ich).
Aber ev. ist meine Denkweise auch verkehrt.
Trotz alle dem kann Ich an der DB struktur nix ändern.Egal ob richtig oder falsch.
Er versuche um eine vorhandene DB drum herum zu programmieren.
Aus veschiedenen Tabellen daten zusammenfügen, Werte ändern und dann dementsprechen zurück zu schreiben.
Ihr habt mir auf jeden fall wieder auf einige Dinge aufmerksam gemacht, welche Ich in einem anderen Projekt, wo Ich die DB selber in der Hand habe anwenden kann.
Im Kern dieses Beitrages ging es aber um folgendes.
Ich denke Ich kann meine Frage jetzt auch besser spezifizieren.
Man nehme ein DGV dort gibt es eine Spalte XY
in dieser Spalte stehen folgende Werte:
1
1
1
5
5
8
20
20
3
3
Nun möchte ich das diese Werte Uniq in eine Auswahl geschrieben werden.
Also sol in der Liste dann:
1
3
5
8
20
stehen.
Wie kann Ich das machen ?
Ich habe kein dataset.
Die daten gehen über einen table direkt in das DGV."Mann" lernt mit seinen Projekten.Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „kiter20“ ()
-
-
Bitte nicht von dem Post #10 irritieren lassen.
Das dotige dataset ist aus einem anderen Projekt.
Ich habe das nur eingefügt um zu zeigen wie die DB aufgebaut ist.
Ich lese die Daten direkt und individuell aus der DB aus. Denn es kann passieren, das die Einzulesende DB nicht ganz mit einer anderen übereinstimmt.(Je nach alter)
Somit würden die columns nicht passen.
Deswegen möchte ich mich nicht auf ein dataset festlegen.
Das funktioniert auch schon alles wunderbar.
Lesen schreiben filtern alles OK.
Oder funktioniert das auch mit dem datatable? Damit meine Ich den Post #6"Mann" lernt mit seinen Projekten.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kiter20“ ()
-
Tja, dassisnu denkbar ungünstig.
Du hast offenbar eine Datenbasis, für die gesteinigt gehört, wer die verzapft hat. Und kommst logischerweise nicht gut damit klar, und hoffst auf hilfreiche Tipps.
In deinem verquasten Fall läuft das aber immer auf eine Weiter-Verquasung des eh verquasten Zeugs hinaus, also immer auf Vorgehensweisen, die man guten Gewissens niemandem empfehlen kann.
Darüberhinaus sind dir die wirklich empfehlenswerten Vorgehensweisen noch ühaupt nicht geläufig.
Also wenn man ühaupt eine Lösung findet, dann nur eine, die du schnellstmöglichst wieder vergessen solltest, und nochmal neu anfangen, die Thematik richtig zu erlernen.
jdfs. die DataSource von deiner komischen Combo hat VB1963 dir ja schon sinnvoll angegeben. Dieser Linq-Ausdruck ist so flexibel, dasses egal ist, von welcher Auflistung die XY-Werte abgerufen werden. Irgendeine Auflistung wirst du ja haben, dann halt was anneres als typDataTable - wissen wir ja auch nicht. -
-
So, habe das von VB1963 probiert.
So etwas hatte Ich auf jeden Fall gemeint.
Natürlich währe Ich nicht in diesem Forum, wenn Ich nicht das naechste Problem/Frage hätte.
Ich habe mir da jetzt einen Filtern zusammengestrickt.
1. Auswahlfeld wähle Ich die column aus
2. Auswahlfeld den Operator
3. Auswahlfeld, den zu Filternden Wert
Bei dem zu Filterndem Wert habe Ich nu auch das Problem.
Es kann sein dass Ich entweder einen String oder etwas Numerisches filtern möchte. Wie kann Ich damit umgehen in bezug auf
= ' String.text '
= Numeric.text
also wenn Ich mit unterschiedlichen Datentypen über ein und denselben filter gehen möchte.
Oder muss man dafür erst über getshema den Datentyp auslesen und dann bei bedarf die ' ' einfügen ?"Mann" lernt mit seinen Projekten. -
ja, ohne Kenntnis des Datentyps kannst du keinen Filter programmieren, denn die Syntax unterscheidet zwischen Strings, DateTime und anderen.
Aber den Datentyp erhälst du nicht per GetSchema, sondern mittm TypeOf-Operator.
vlt bietet DataExpressions bereits die Lösung dieses Probs. -
Ich weiss nicht, ob Ich das jetzt so richtig verstanden habe, aber mit typeof und dem was in dem Link steht,
wird doch überprüft was an daten gefiltert wird. Nicht was die zu filternde column für ein Typ ist.
Somit würde Ich ein Problem bekommen, wenn der Name für ein Profil nicht rein als String zu erkennen ist, sondern zb 123 lautet.
Wenn Ich mein DGV über ein Datatable befülle, haben dann die columns im DGV und im DT den gleichen Typ wie ind der DB ?"Mann" lernt mit seinen Projekten.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kiter20“ ()
-
kiter20 schrieb:
Ich weiss nicht, ob Ich das jetzt so richtig verstanden habe, aber mit typeof und dem was in dem Link steht,
wird doch überprüft was an daten gefiltert wird. Nicht was die zu filternde column für ein Typ ist.
kiter20 schrieb:
Somit würde Ich ein Problem bekommen, wenn der Name für ein Profil nicht rein als String zu erkennen ist, sondern zb 123 lautet."123"
ist ein String, und123
ist ein Integer.
Ist die Name-Property als String angelegt, so wirds mit 123 failen.
kiter20 schrieb:
Wenn Ich mein DGV über ein Datatable befülle, haben dann die columns im DGV und im DT den gleichen Typ wie ind der DB ?
Es kommt auf den Datentyp der DataColumn an, nicht auf die Columns im DGV!
Tja, dassis eben das Problem: Verwarzte Datenbasis, keine Kenntnis, wies richtig ginge, und wg. der Verwarzung auch keine Möglichkeit, es richtig zu erlernen. -
Tja,
dassis eben das Problem: Verwarzte Datenbasis, keine Kenntnis, wies
richtig ginge, und wg. der Verwarzung auch keine Möglichkeit, es richtig
zu erlernen.
Halloo! Kapier mal: Das DGV wird nicht befüllt, es wird eine DataTable befüllt!
den datatable. Besser? Trotz alle dem würde Ich es als mit Daten füllen bezeichnen. Das es erst den Weg über den datatable geht ist ja noch ne andere Sache.
Mann könnte ja zb. auch direkt die Daten aus der DB in DGV schreiben, und dann hätte Ich das DGV befüllt.
Natürlich binn Ich Änfänger, und Ich werde auch nie auf Dein/Euer level kommen. Möchte Ich auch nicht.(Möchten schon, aber dann binn Ich alt und grau)
Mir geht es also nicht immer um die Perfekte lösung für meinen Speziellen Anwendungsfall, sonder um das Problem an sich.
_________________________
Also wird beim erstellen des datatables der Datentyp automatisch auf den der DB gesetzt.
Und wenn Ich dann das DGV.datasource = DT mache, haben dann die Columns automatisch den gleichen Datentyp.
ErfinderDesRades schrieb:
keine Ahnung, was du meinst. "123" ist ein String, und 123 ist ein Integer.
Ist die Name-Property als String angelegt, so wirds mit 123 failen.
ErfinderDesRades schrieb:
Richtig. Dass die im Filter angegebene Column den richtigen Datentyp hat, wird vorrausgesetzt.
Ich muss ja erst einmal herausfinden, welchen datentyp die column hat, oder nicht.
Denn der columnName, denn Ich in meiner Liste auswähle, verrät mir das noch nicht.
Und die der Filterwert auch nicht. Denn Ich könnte ja 123 als String filtern wollen.
Somit ist mein Gedankengang so, das ich mit dem Name der column mir diese Information beschaffen muss.
Weshalb Ich ja wissen wollte, ob der datentyp automatisch überall Übertragen wird.
Denn dann würde Ich doch diese Info aus dem datable oder dgv bekommen.(damit Ich die DB nicht öffnen muss)
Hätte Ich denn dies Problem nicht, wenn Ich eine Ordentliche DB hätte und mir dort so einen Filter einbauen würde?"Mann" lernt mit seinen Projekten. -
kiter20 schrieb:
Mann könnte ja zb. auch direkt die Daten aus der DB in DGV schreiben, und dann hätte Ich das DGV befüllt.
kiter20 schrieb:
Somit ist mein Gedankengang so, das ich mit dem Name der column mir diese Information beschaffen muss.
Weshalb Ich ja wissen wollte, ob der datentyp automatisch überall Übertragen wird.
kiter20 schrieb:
Hätte Ich denn dies Problem nicht, wenn Ich eine Ordentliche DB hätte und mir dort so einen Filter einbauen würde?
Bei dem was du hast, fürchte ich, dass alle DataColumns primitiverweise DataType.Object eingestellt haben, und eiglich erst dann ist dein Problem ein Problem.
Du hast doch ein untypisiertes Dataset oder?
Oder nur eine einzelne untypisierte DataTable?
-
Ähnliche Themen
-
5 Benutzer haben hier geschrieben
- kiter20 (15)
- ErfinderDesRades (12)
- VB1963 (2)
- VaporiZed (1)
- Sam85 (1)