Autor |
Beitrag |
moori64
      
Beiträge: 76
|
Verfasst: Fr 16.12.11 00:52
Hallo ,
ich sitzte hier schon die ganze woche dran und komme nicht weiter , ich will eine datagrid über mehrere combobox filtern ich möchte alle zutreffenden datensätze haben.,
momentan habe ich das fertig.
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:
| private void Form1_Load(object sender, EventArgs e) { string connstr = @"data source=localhost\V2B;user id=sa;password=moori64;integrated security=false;" + "persist security info=false;initial catalog=gaststaetten"; SqlConnection conn = new SqlConnection(connstr); SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Lokal ", conn); DataTable dt = new DataTable(); da.Fill(dt);
dgvergebniss.DataSource = dt; }
private void cmbkneipe_SelectedIndexChanged(object sender, EventArgs e) { cmbkneipe.DataSource = dt.DefaultView; cmbkneipe.DisplayMember = "Kneipe"; cmbkneipe.ValueMember = "ID";
int id = (int)cmbkneipe.SelectedItem; dt.DefaultView.Filter = "Kneipe = " + id; dgvergebniss.DataSource = dt.DefaultView;
}
} } |
gruß uwe
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Fr 16.12.11 08:05
Moin,
naja, da Du Deine DataTable dt innerhalb der Methode Form1_Load definierst ist sie natürlich nur dort sichtbar.
Wenn Du ineiner anderen Methode darauf zugreifen willlst, so musst Du entweder die DataTable global innerhalb der Klasse definieren oder Du greifst einfach auf die DataSource des DataGrid zu, die Du ja gesetzt hast.
Also in etwa so:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| private void cmbkneipe_SelectedIndexChanged(object sender, EventArgs e) { DataTable dt = dgvergebniss.DataSource as DataTable;
cmbkneipe.DataSource = dt.DefaultView; cmbkneipe.DisplayMember = "Kneipe"; cmbkneipe.ValueMember = "ID";
int id = (int)cmbkneipe.SelectedItem; dt.DefaultView.Filter = "Kneipe = " + id; } | So müsste es eigentlich richtig sein.
Kurze Anmerkung noch:
Quelltext 1: 2:
| @"data source=localhost\V2B;user id=sa;password=moori64;integrated security=false;" + "persist security info=false;initial catalog=gaststaetten" | Warum in aller Welt gehtst Du denn über den SA-Account zur Datenbank??
|
|
moori64 
      
Beiträge: 76
|
Verfasst: Fr 16.12.11 10:40
Moin,
was mache ich da denn falsch mit den Sa ?
ich habe das buch von galileo und ein schulungs cd und da wurde das so gemacht. aber ich nehme gerne ein hinweis von erfahrenden leuten an.
bei den aufruf dt.DefaultView.Filter sagt er mir das er keine methode filter hat und das stimmt auch. komisch ist nur das es vorher nicht
rot unterstrichen war liegt das an der neuen zuweisung?
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| DataTable dt = dgvergebniss.DataSource as DataTable;
cmbkneipe.DataSource = dt.DefaultView; cmbkneipe.DisplayMember = "Kneipe"; cmbkneipe.ValueMember = "ID";
int id = (int)cmbkneipe.SelectedItem; dt.DefaultView.Filter = "Kneipe = " + id; |
"System.Data.DataView" enthält keine Definition für "Filter", und es konnte keine Erweiterungsmethode "Filter" gefunden werden, die ein erstes Argument vom Typ "System.Data.DataView" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)
C#-Quelltext 1:
| dgvergebniss.DataSource = dt.DefaultView; |
Moderiert von Th69: C#-Tags hinzugefügt
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 16.12.11 11:06
Hallo Uwe,
beim DataView heißt die Eigenschaft 'RowFilter' (bei der BindingSource heißt sie einfach nur 'Filter').
Und bzgl. 'sa': dies ist der Super-Administrator der Datenbank. Du solltest dir also besser einen eigenen User anlegen (bzw. mittels "Integrated Security=true" den Windows-User benutzen).
Und bitte setze demnächst hier im Forum den Source-Code selber in C#-Tags (unter "Bereiche")...
|
|
moori64 
      
Beiträge: 76
|
Verfasst: Fr 16.12.11 11:15
Hallo,
habe ich im eifer des gefechts einfach vergessen , aber ich gelobe besserung.
mit den filter habe ich auch rausgefunden dann meckert er aber bei der zuweisung
C#-Quelltext 1:
| int id = (int)cmbkneipe.SelectedItem; |
gruß uwe
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Fr 16.12.11 20:48
moori64 hat folgendes geschrieben : | was mache ich da denn falsch mit den Sa ?
ich habe das buch von galileo und ein schulungs cd und da wurde das so gemacht. aber ich nehme gerne ein hinweis von erfahrenden leuten an. |
Th69 hat es ja schon erläutert.
Mit dem SA-Account hast Du Zugriff auf den ganzen DB-Server, alle Datenbanken darauf...
Und wenn diese Daten in die falschen Hände gerät...
Wenn Du z.B. Deine Software nach auusen geben möchtest, will ich mal sehen, wie lange der Server lebt.
|
|
moori64 
      
Beiträge: 76
|
Verfasst: Fr 16.12.11 21:00
Ich habe das bereits geändert, kann mir jemand noch ein tip für die andere sache geben ?
gruß uwe
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Fr 16.12.11 21:05
Ist es ein Compiler- oder Laufzeitfehler? Wann ja (  ), wie lautet er?
Wenn es ein Laufzeitfehler ist: Setze mal einen Haltepunkt an die Stelle und füge cmbkneipe.SelectedItem zu den überwachten Ausdrücken hinzu. Dann siehst du den Typ von SelectedItem. Sollte eigentlich int sein, wenn ich das mit ValueMember richtig verstanden habe.
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 16.12.11 21:21
Evtl. mußt du vorher noch auf 'null' prüfen.
Hast du denn den ComboBox.DropDownStyle auf 'DropDownList' gesetzt (so daß keine eigenen Werte von Hand eingetragen werden können)?
|
|
moori64 
      
Beiträge: 76
|
Verfasst: Sa 17.12.11 10:39
Hallo ,
momentan bin ich soweit, auf 0 habe ich noch nicht gerpüft weil ich nicht weiß wie das geht.
wenn ich die messagebox aktiv mache erhalte ich den index. Aber eigentlich wollte ich nicht das ein
Pfeil auf den Eintrag zeigt sonder ich wollte das , dass was ich ausgewählt habe erscheint wenn ich also ein
gaststätte ausgewählt habe wollte ich nur die haben muss ich das vielleicht mit ein dataset machen ?
Fehlertext den ich momentan erhalte lautet so.
Die Operation '=' kann nicht an System.String und System.Int32 durchgeführt werden.
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:
| SqlConnection conn = new SqlConnection(connstr); SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Lokal ", conn); DataTable dt = new DataTable(); da.Fill(dt); dgvergebniss.DataSource = dt;
cmbkneipe.DataSource = dt; cmbkneipe.DisplayMember = "Kneipe"; cmbkneipe.ValueMember = "ID";
cmbkunde.DataSource = dt; cmbkunde.DisplayMember = "Kunde"; cmbkunde.ValueMember = "ID"; }
private void cmbkneipe_SelectedIndexChanged(object sender, EventArgs e) { DataTable dt = dgvergebniss.DataSource as DataTable; this.cmbkneipe.DropDownStyle = ComboBoxStyle.DropDownList;
int id = (int)cmbkneipe.SelectedIndex; dt.DefaultView.RowFilter = "Kneipe = " + id;
dgvergebniss.DataSource = dt.DefaultView.RowFilter;
|
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Sa 17.12.11 12:23
Hallo Uwe,
du bist wirklich ein harter Fall, puh.
Wie kommst du jetzt darauf, den RowFilter-String als DataSource anzugeben? Deine vorherige Version war doch schon richtig.
Und den ComboBox-Style solltest du einmalig im Konstruktor (bzw. im Designer) vornehmen.
|
|
moori64 
      
Beiträge: 76
|
Verfasst: Sa 17.12.11 18:57
hallo,
ich verfüge noch nicht über die ausreichende erfahrung möchte aber , da ich das im selbstudium mache und nur die theorie habe auch
praxis wissen erwerben und deshalb mache ich diese übungen.
ich habe bei dieser int zuweisung immer ein fehler und habe eben solange versucht bis irgendwas funktioniert hat.
viele grüße
we
|
|