PDA

Vollständige Version anzeigen : DataTable.Select-Methode


Tott666
05.04.2007, 11:34
Hallo zusammen,

ich habe ein Problem mit der "DataTable.Select-Methode"

Zu meiner Situation:
- ich habe ein Dataset mit 2 Tabellen
-- Tabelle Bereich enthält halt verschiedene Bereiche (PK auf Bereich)
-- Tabelle Detail enthält zu jedem Bereich verschiedene Einträge (ohne PK) 1. Spalte ist "Bereich"

- ich fülle beide Tabellen des Datasets komplett mit allem was möglich ist, damit ich nach einer Auswahl nicht erst wieder eine Anfrage an die DB machen muß

- ich habe eine Combobox, welche mit der Tabelle Bereich des DS gefüllt wird.

nun möchte ich gerne, dass die Listbox dadrunter nur mit dem gefüllt wird, was in der combobox ausgewählt wurde.
Ich muß also in dem datatable einen filter setzen können.
Ich habe also gesucht und die "DataTable.Select-Methode" gefunden, doch irgentwie will die nicht.

In der MSDN steht jedoch drin, dass er wohl durch die Spalten geht (*wenn ich es richtig verstanden habe*)
Ruft ein Array aller DataRow-Objekte, die die Filterkriterien erfüllen, in der Primärschlüsselreihenfolge ab (sofern kein Primärschlüssel vorhanden ist, in der Reihenfolge des Hinzufügens).

Hier nun noch die zeile code wo er es machen soll, so wie ich es im mom statische mache, damit ich sehe, ob es überhaubt was gibt:

Me.lstAuswahl.DataSource = _SYSdsAuswahl.Bereich_Detail.Select("Bereich='Allgemein'")


und wo liegt nun mein denkfehler ???

PLEASE help me
Tott

hcscherzer
06.04.2007, 12:42
Moin,
ich gestehe, dass ich mir daran auch schon mal die Zähne ausgebissen habe. Letztlich habe ich es so gelöst, dass nach Änderung der ComboBox per Aufruf von SelectionChangeCommitted() das DataSet für das gefilterte Control erneut aus der DB gefüllt wird (mit dem betreffend gesetzten Filter).

Tott666
16.04.2007, 12:31
Ich möchte das Thema gerne noch mal aufgreifen, klar kann man erneut ein select aufrufen, doch warum die datenbank erneut abfragen, wenn es auch ohne gehen müßte :cool:

hcscherzer
16.04.2007, 16:36
warum die datenbank erneut abfragen, wenn es auch ohne gehen müßteTscha, wenn ich wüsste, wie es geht, würde ich auch nicht zweimal ... allerdings habe ich noch niemanden gefunden, der es mir hätte beibringen können ... und Michael Kofler hat sein Buchprojekt über VB.NET und ADO bekanntlich erst mal zurückgestellt ... :(

Tott666
17.04.2007, 13:31
So, ich habe mich noch mal mit dem thema auseinander gesetzt und diesmal nicht aufgegeben, bis ich die lösung hatte. Im Nachhinein ist es einfacher als gedacht ;)


_ds.Bereich_Detail.Select("Bereich = '" & Me.cmbBereich.SelectedValue & "'")


Man gibt in der Klammer einfach die Bedingung ein, die man Filtern will, ich habe dies zwar nicht aus der msdn , weil da steht nur die Where-Klausel, aber durch Fehlermeldungen kommt man manchmal auch ans Ziel :D

Nicht registriert
16.01.2008, 17:07
Ich habe ein ähnliches Problem:
Ich versuche eine Select abfrage über ein DataSet laufen zu lassen da meine Datenbank abfrage so gross ist und desswegen auch erheblich Ressourcen frisst, will ich das DataSet nicht zweimal mit einem SQL Select statement belaste (Was einfacher währe).
Lange rede kurzer sinn: Ich befülle mein DataSet mit der Select abfrage aus der Datenbank, die beim erstaufruf der Seite erzeugt wird. Nun habe ich die Daten im DataSet und möchte über dieses DataSet weitere Selects laufen lassen.
Mein code bis jetzt:


m_daSuchen = new SqlDataAdapter("Select * from dbo.ww_bez_intern", m_conSuche);
m_dsSuchen = new DataSet("Suchen");
m_daSuchen.Fill(m_dsSuchen, "Suchen");

grid_Suchen.DataSource = m_dsSuchen.Tables["Suchen"];
grid_Suchen.DataBind();

m_conSuche.Close();

protected void bSuchen_Click(object sender, EventArgs e)
{
if (txtSuchbegriff.Text != "")
{
DataTable dt_suchen = m_dsSuchen.Tables["Suchen"];
grid_Suchen.DataSource = dt_suchen.Select("Suchen ='" + txtSuchbegriff.Text + "'");

}
else
{
//MessageBox.Show("Bitte geben Sie Einen Korrekten Suchbegriff ein!!!");
}
}

Ich bekomme die Fehlermeldung nach dem Kompilieren das er dei Column ["Suchen"] nicht kennt. nur will ich ja gar nicht eine Column mitgeben sondern die ganze Table.

Könnt Ihr mir sagen wo hier der Haken liegt?

Noodles
16.01.2008, 18:24
Was willst Du mit dem Select bewirken? Vorallem wenn Suchen eine Tabelle und keine Spalte sein soll.

Nicht Registriert
17.01.2008, 09:05
Was ich mit dem Select bewirken will ist:
1. Das DataSet nur einmal mit den Daten von der DB abfüllen. Und Das geschiet im Load.
2. Das DataSet weiterverwenden, in dem ich je nach Funktion, nach Alphabet oder einzelnen Zeichen suchen kann und mir diese dann wieder am Ende per
m_dsSuchen.Fill(m_daSuchen, "Suchen"); in ein DataSet überführen kann.
3. Mein Problem ist jetzt das ich über die ganze Tabelle suchen will und nicht über eine spezifische Column.
Ein kleiner Fingerzeig währe da schon Hilfreich da ich erst ein halbes Jahr mit C# arbeite und die Syntaxen noch nicht so gut kenne.


Besten Dank im voraus

Noodles
17.01.2008, 10:22
Ist mir nicht bewußt, dass das funktioniert. Das DataSet kann kein SQL. EDrst mit LINQ wird das DataSet richtig abfragbar.

Schau Dir mal die Hilfe zu:
DataView.RowFilter
DataView.FindRow
DataView.FindRows

an. Vielleicht hilft Dir das irgendwie.

Nicht Registriert
17.01.2008, 11:28
Da war ich leider schon.
Vieleicht liegt es auch daran das ich ein Blutiger anfänger bin

Detailiertere Problemstellung:
--------------------------------

Ich habe ein gefülltes DataSet.
Jetzt möchte ich in diesem DataSet nach char or strings suchen/Filtern und alle Datensätze erhalten die dieses char or Strings beinhalten.
Mir ist aber nur der Tabellen name bekannt und nicht die Columnamen.

Noodles
17.01.2008, 12:25
Dann musst Du wohl über die Spalten iterieren und die Werte prüfen. Eine DataTable hat ja eine Rows- und ColumnsCollection, damit kannst Du über die Spalten iterieren.

Nicht Registriert
17.01.2008, 14:08
Ich habe einen Denkfehler gemacht.

Ich kann meine Idee nur mit dem bekanntmachen den Spallten namen bewerkstelligen und nachher mit SQL filtern.

z.B.
Select * from dbo.ww_bez_intern where LCID = 2055 or MANDID = 'p3'

Select * from dbo.ww_bez_intern where KURZTEXT like ('%stk%')

Aber:
Wie Funktioniert dann eine Volltext suche??? (z.B. Ctrl + F)