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



BeitragVerfasst: Di 17.01.12 09:31 
Hallo,

so wie ich das jetzt da unten habe , funktioniert die filterung eines Datagrids mit mehreren Comboxen.
Nun habe ich aber noch das problem das zum Anfang ja alle Daten angezeigt werden und die Comboxen mit einen
Wert gefüllt sind. wie kann ich nun erreichen das ich nach und nach die filterwerte heranziehen kann.

zum anfang möchte ich nur über ein box filtern. momentan filter er dann immer gleich über.
es soll also ein wort z.-b. ALLES drin stehen und dieses Wort soll er dann aber ausschließen , kann mir jemand mal einen
ansatz geben.

vielen dank für eure mühe



ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
      private void cmbwerk_SelectedIndexChanged(object sender, EventArgs e)
        {
            DataView dv1 = new DataView(table_chart);
           

            if (cmbkwab.SelectedValue != null && cmbkwbis.SelectedValue != null 
                && cmblieferant.SelectedValue != null && cmbwerk.SelectedValue != null)
            {

                dv1.RowFilter = "KW > = '" + cmbkwab.SelectedValue.ToString() +

                             "' AND KW < = '" + cmbkwbis.SelectedValue.ToString() +
                             "'AND Lieferant  = '" + cmblieferant.SelectedValue.ToString() +
                             "'AND Werk = '" + cmbwerk.SelectedValue.ToString() + "'";
                           

                       

                    dgvausgabe.DataSource = dv1;
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Di 17.01.12 11:03 
Hallo moori64

Ich würde den Filterwert in einer Methode zusammensetzen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
string MeinFilterwert(string cb1, string cb2, string cb3, string cb4)
        {
            // Filterwert entsprechend zusammensetzen
            string s_meinfilterwert = cb1 + cb2 + cb3 + cb4;
            
            // Filterwert zurückgeben
            return s_meinfilterwert;
        }
private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(MeinFilterwert("Den ""Filterwert ""entsprechend ""zusammengesetzt."));
        }

Die Methode kannst Du dann bei irgeneinem Ereigniss aufrufen und das DGV mit dem Filterwert aktualisieren.

Wenn Du dem User die Reihenfolge der Filterselektierung vorgeben willst, stellst Du die Enable-Eigenschaft der einzelnen CB's auf False.
Wenn die Reihenfolge egal sein soll, musst Du das in der Methode berücksichtigen.

Das Wörtchen "ALLES" würde ich nicht ausschliessen (ist verständlicher für den User), denn wenn es für den User unsichtbar sein soll, kannst Du ebensogut ein Item ohne Text setzen.
Meines Wissens kannst Du ein Item in einer CB nicht unsichtbar setzen.

_________________
Gruss
mats74
moori64 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Di 17.01.12 16:50 
Hallo,

besten Dank , ich werde das mal versuchen.

viele grüße uwe
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Di 17.01.12 17:25 
Hallo uwe

Der grosse Vorteil dieser Möglichkeit ist, dass Du die vielen Varianten der Selektion der CB und dem daraus resultierenden Filterwert sehr einfach mit der Parameterwertübergabe entsprechend in der Methode verarbeiten kannst (natürlich abhängig von der komplexität des Methodencodes).
Da entfallen einige komplexe, wiederkehrende Anweisungen in den verwendeten Ereignissen und der Code wird wesentlich übersichtlicher.

_________________
Gruss
mats74
moori64 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Fr 20.01.12 11:00 
Hallo Mats,

da ich im thema mit methoden noch nicht so bewandert bin und meine versuche bisher nicht so toll waren,
würde ich die bitte mir vielleicht mal ein beispiel zu nennen wo diese methoden zur filterung im ansatz vorgestellt werden,
vielleicht kann ich mir da etwas abschauen .

vielen dank uwer
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Fr 20.01.12 13:38 
Hallo uwe

"Methoden zur Filterung" gibt es nicht.
Die musst Du schon selbst erstellen und das ist kein Hexenwerk.
Ich kann Dir meine Codes nicht zur Verfügung stellen, da mein Arbeitgeber wahrscheinlich nicht viel Freude daran hätte :evil:
(verständlicherweise).
Ich habe deinen Code in meinem ein Bisschen umgesetzt, vielleicht kommst Du dadurch auf weitere Ideen.
Du musst ja eigentlich nur den richtigen Stringwert für die Filterung durch ausführen der Methode erhalten:
ausblenden volle Höhe C#-Quelltext
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:
string MeinFilterwert(string cb1, string cb2, string cb3, string cb4)
        {
            // Variable für Filterwert erstellen
            string s_meinfilterwert = "";
            string s_sonstigertext = "";
            // Filterwert entsprechend der CB-Einträgen erstellen
            // cb1 Filterwert berücksichtigen
            if (cb1 != "")
            {
                s_meinfilterwert += "KW > = '" + cb1 + "' ";
                s_sonstigertext = "AND ";
            }
            // cb2 Filterwert berücksichtigen
            if (cb2 != "")
            {
                // Sonstigertext beachten
                if (s_sonstigertext != "")
                {
                    s_meinfilterwert += s_sonstigertext + "KW > = '" + cb2 + "' ";
                }
                else
                {
                    s_meinfilterwert += "KW > = '" + cb2 + "' ";
                    s_sonstigertext = "AND ";
                }
            }
 
            // ... und so weiter.
 
            // Filterwert zurückgeben
            return s_meinfilterwert;
        }
  
private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(MeinFilterwert(cmbkwab.SelectedValue.ToString(),
                                           cmbkwbis.SelectedValue.ToString(),
                                           cmblieferant.SelectedValue.ToString(),
                                           cmbwerk.SelectedValue.ToString()));
        }

Wie Du also diesen Stringwert zusammensetzt liegt bei Dir.
Die Logik dazu musst Du selbst gemäss deinen Vorgaben entwickeln.

_________________
Gruss
mats74
moori64 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Fr 20.01.12 15:06 
hallo Mats,

das ist doch aber schon mal was , besten dank für deine mühe.
ich werde jetzt mal versuche darauf aufzubauen.

vielen dank uwe