Autor Beitrag
moori64
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mo 12.12.11 16:23 
Hallo,

ich komme einfach nicht drauf wie ich es am besten machen könnte.

Ich habe ein datagridview und ringsherum comboboxen.
Ich habe eine Tabelle die ich mit meinen Comboboxen immer genauer eingrenzen will.

z.b.

10 gaststätten wurde von einer gewissen anzahl lieferanten beliefert und wenn ich mir in der combobox eine gasstätte aussuche will ich nur die lieferanten dieser gaststätte haben und wenn ich in einer combobox mir einen lieferanten auswähle dann will ich nur die daten von diesen einen lieferanten haben .
muss ich das auch mit ein master detail formular machen oder gibt es da eine andere möglichkeit.

die daten verändern sich ja immer und ich müsste die tabelle ja immer anpassen aber wie.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 12.12.11 17:58 
Hallo,

ich hoffe mal, daß du DataBinding für dein DGV verwendest (z.B. über eine BindingSource oder eine DataTable)? Und dann brauchst du doch nur den Filter entsprechend deinen ComboBoxen setzen (bei mehreren dann entsprechend mit "AND" verknüpfen).
moori64 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mo 12.12.11 18:30 
hallo,

ich habe das buch von galileo aber mit filter setzten,

meinst du das so
ausblenden C#-Quelltext
1:
SqlCommand command = new SqlCommand("SELECT * FROM   XXX where  gaststaette = selected.index.changed ", conn);					

aus der combobox . jetzt steht der wert in der table.
erfolgt der nächste loop jetzt über table?
ausblenden C#-Quelltext
1:
dgvgast.bindingsource = table					

nur als beispiel aber die table verändert sich doch nicht oder doch ?

gruß uwe

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 12.12.11 18:55 
Du könntest natürlich jedesmal eine neue Query absetzen (je nach Datenvolumen und Performance).
Oder aber du holst dir einmalig alle Daten und bindest das DGV dann an ein DataView der DataTable:
ausblenden C#-Quelltext
1:
dgv.DataSource = dataTable.DefaultView;					

Und über diesen DataView kannst du dann den Filter setzen, z.B.
ausblenden C#-Quelltext
1:
dataTable.DefaultView.Filter = "gaststaette = " + id;					

Beim Filter kannst du dann auch alle gängigen SQL Operatoren (AND, OR, NOT) benutzen.

Und bei den ComboBoxen solltest du auch DataBinding (DataSource, DisplayMember, ValueMember) benutzen.
Dann kannst du über
ausblenden C#-Quelltext
1:
int id = (int)comboBox.SelectedValue; // Edit: vorher stand hier SelectedItem					

an die Id für deinen Filter kommen (solange ValueMember auf die Id-Spalte gesetzt wurde).
Evtl. noch einen Dummy-Leereintrag zu der DataBinding-Liste hinzufügen und diesen dann entsprechend behandeln (d.h. für die Filterung ignorieren).

P.S: Lies dich am besten mal in die DataView-Klasse ein.

Edit: SelectedItem nach SelectedValue korrigiert, s.a. www.c-sharp-forum.de....php?p=656211#656211


Zuletzt bearbeitet von Th69 am Mo 19.12.11 21:10, insgesamt 1-mal bearbeitet
moori64 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mo 12.12.11 20:55 
hallo,

hab vielen dank für deine mühe , das werde ich mal tuen .


viele grüße

uwe
moori64 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Di 13.12.11 09:49 
Guten Morgen,

ich habe da mal was angefangen, nun habe ich 2 probleme die comboboxen zeigen mir nun alle einträge aus den lieferanten und gaststätten an es müssten aber nur jeweils 6 sein
und wie kann ich das filter nun so setzten das wenn ich eine kneipe ausgewählt habe auch nur die daten dieser einen bekomme?
genau das selbe für die lieferanten auch?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
            SqlConnection conn = new SqlConnection(connstr);

            SqlCommand command = new SqlCommand("SELECT *  FROM gaststaetten", conn);
            adapterchartdata = new SqlDataAdapter(command);

            table = new DataTable();
            adapterchartdata.Fill(table);

            cmbwerk.DataSource = table;
            cmbwerk.DisplayMember = "gaststaette";
            cmbwerk.ValueMember = "gaststaette";

            cmblieferant.DataSource = table;
            cmblieferant.DisplayMember = "Lieferant";
            cmblieferant.ValueMember = "Lieferant";

            dgvmaterial.DataSource = table.DefaultView;


Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.


Zuletzt bearbeitet von moori64 am Di 13.12.11 11:58, insgesamt 1-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 13.12.11 11:29 
Hallo,

eigentlich müßte mein Code doch reichen, d.h. einfach im ComboBox_SelectedIndexChanged-Ereignis den Filter zusammenbauen.

Der Artikel Filtering and Sorting in ADO.NET müßte aber ganz hilfreich sein.

Im Internet habe ich noch folgende ähnliche Anfrage gefunden: ComboBox Filtering in DataGridView (auch wenn hier die ComboBoxen als Spalten vorliegen anstatt wie bei dir außerhalb, das Prinzip ist aber das gleiche).

Alternativ könntest du auch mal folgenden Artikel anschauen: Building a Drop-Down Filter List for a DataGridView Column Header Cell (bzw. den Code herunterladen und benutzen).

So ich hoffe, dir nun genug Lesestoff gegeben zu haben ;-)


Zuletzt bearbeitet von Th69 am Mo 19.12.11 21:11, insgesamt 1-mal bearbeitet
moori64 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Di 13.12.11 12:14 
Hallo,

ich werde das mal durcharbeiten , ich habe ja auch noch dieses riesen buch von galileo aber da ist sehr viel schon in wpf eingearbeitet und das soll ich
noch nicht machen , wurde mir gesagt ich soll erst mal bei den grundlagen bleiben. trotzdem vielen dank für deine mühe.


uwe
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 13.12.11 12:55 
Hallo Uwe,

unter openbook.galileocomp...ng.de/visual_csharp/ gibt es noch das OpenBook "Visual C# 2008".
Dort sind im Kapitel 28 die Klassen DataSet, DataTable, DataView etc. beschrieben.
moori64 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Di 13.12.11 13:22 
Hallo.

ich back jetzt erst mal kleine brötchen 2 comboboxen und ein datagrid , wenn ich das geschafft habe lade ich dich auf ein mittag ein.
bin ja öfters in bielefeld. :-)

gruß uwe

Moderiert von user profile iconNarses: Beiträge zusammengefasst

hallo nochmal,

ich weiß das ich dazu ein neues thema aufmachen müsste , aber ich habe folgendes probelem

wenn ich mit dem tool versuche ein txt datei in die datenbank einzulesen schlägt das immer fehl erstens habe ich in der textdatei
keine id spalte und 2 formatiert er immer die felder die ich als text deklariert habe in float obwohl ich die aber als char habe will.
ich kann das in der datenbank ja nicht mehr ändern oder doch ?


gruß uwe
moori64 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Do 15.12.11 09:57 
Hallo,

@ TH69 brauche ich um dieses Filter zu setzen zwingend eine ID in der Datenbank ?


Momentan bekomme ich die ID mit dem Assistenten nicht eingespielt in die Datenbank.


Viele Grüße Uwe