Wątek przeniesiony 2016-11-09 12:09 z C# i .NET przez ŁF.

Filtr dla dwóch combo nie działa, jeśli któryś z nich jest pusty

0

Witam mam pewien problem z prostym filtrem ...
filtrujemy ocenę z 2 warunkami combo 1 i combo 2 jeżeli oba są załadowane warunek idzie sprawnie ale jeżeli którekolwiek jest null or empty jest kłopot

var connnn = from c in polaczenie.matrices where c.Operator == comboBox1.Text || c.Indeks==comboBox2.Text orderby c.Ocena select new { c.Operator, c.Ocena,c.Maszyna,c.Indeks };
            dataGridView1.DataSource = connnn.ToList(); 

zrobiłem coś takiego ale niestety nie tędy droga

   private void PusteCombo()
        {
            if (string.IsNullOrEmpty(comboBox1.Text) && string.IsNullOrEmpty(comboBox2.Text) )
            {
                comboBox1.Text = "...";
                comboBox2.Text = "...";
            }

pomożecie ?

0

Jeśli jakieś dane są potrzebne do wykonania zapytania a ich brakuje to dodaj walidację, czyli przed wykonaniem zapytania sprawdzaj czy wszystkie comboboxy są uzupełnione jeśli nie są poinformuj o tym użytkownika i każ mu uzupełnić lub ustaw wartości domyślne w comboboxie ale w twoim przypadku to się nie sprawdzi.

Pogooglaj pod hasłem: c# validation {nazwa technologi wpf/winforms}

0

sytuacje mogą być trzy 1: warunek1 || warunek 2
2: warunek1 || puste combo
3: puste combo || warunek 2

kiedy mam puste combo zapytanie nie działa jeżeli wypełnie je czymkolwiek to zapytanie rusza dobrze
pytanie jak zrobić żeby zawsze combo kiedy powinno być puste dawało wartość "..."

0

Ale co znaczy nie działa, nic nie zwraca? Leci wyjątek?

Zapytanie samo w sobie jest poprawne i spełnia wyżej wymienione warunki. Więc problem raczej leży gdzieś indziej.</del>

Hmm chyba już wiem o co ci chodzi:

Tharnog napisał(a):

pytanie jak zrobić żeby zawsze combo kiedy powinno być puste dawało wartość "..."

if (string.IsNullOrEmpty(comboBox1.Text) && string.IsNullOrEmpty(comboBox2.Text) )

Masz tutaj warunek AND a nie OR. A tak na prawdę to powinny być dwa oddzielne ify:

if(string.IsNullOrEmpty(comboBox1.Text))
{
                comboBox1.Text = "...";
}

if(string.IsNullOrEmpty(comboBox2.Text))
{
                comboBox2.Text = "...";
}
0

Niestety dalej działa tak samo czyli po uruchomieniu aplikacji oba comba są uzupełnione "...".
ale po pierwszej edycji zostaje puste combo zamiast "..."

0

Dobra jestem prawie u mety opanowałem puste pola w combobox w ten sposób

  private void button2_Click(object sender, EventArgs e)
        { 

            var warunek1 = from c in polaczenie.matrices where c.Operator == comboBox1.Text  orderby c.Ocena select new { c.Operator, c.Ocena, c.Maszyna, c.Indeks };
            var warunek2 = from c in polaczenie.matrices where c.Indeks == comboBox2.Text orderby c.Ocena select new { c.Operator, c.Ocena, c.Maszyna, c.Indeks };
            var warunek3 = from c in polaczenie.matrices where c.Operator == comboBox1.Text||c.Indeks==comboBox2.Text orderby c.Ocena select new { c.Operator, c.Ocena, c.Maszyna, c.Indeks };
            if(string.IsNullOrEmpty(comboBox2.Text))
            {
                dataGridView1.DataSource = warunek1.ToList();
            }
            else
            if(string.IsNullOrEmpty(comboBox1.Text))
            {
                dataGridView1.DataSource = warunek2.ToList();
            }
            else
            if (comboBox1 != null && comboBox2 != null)
            {
                dataGridView1.DataSource = warunek3.ToList();
            } 

ale dalej mam problem z pokazywaniem filtru dla 2 combo wypełnionych

powinno pokazać dla operatora "x" i dla indeksu "y"
powinno pokazać tylko powiązania "xy"

a pokazuje "xy" i "zy"
czyli operator "z" który robił ten sam indeks "y"

1

No ale co jest złego w takim rozwiązaniu?:

private void PusteCombo()
{
    if(string.IsNullOrEmpty(comboBox1.Text))
    {
        comboBox1.Text = "...";
    }

    if(string.IsNullOrEmpty(comboBox2.Text))
    {
        comboBox2.Text = "...";
    }
}

private void button2_Click(object sender, EventArgs e)
{
    PusteCombo();
    var connnn = from c in polaczenie.matrices where c.Operator == comboBox1.Text || c.Indeks==comboBox2.Text orderby c.Ocena select new { c.Operator, c.Ocena,c.Maszyna,c.Indeks };
    dataGridView1.DataSource = connnn.ToList(); 
}
0

Dobra udało się

   private void button2_Click(object sender, EventArgs e)
        { 

            var warunek1 = from c in polaczenie.matrices where c.Operator == comboBox1.Text  orderby c.Ocena select new { c.Operator, c.Ocena, c.Maszyna, c.Indeks };
            var warunek2 = from c in polaczenie.matrices where c.Indeks == comboBox2.Text orderby c.Ocena select new { c.Operator, c.Ocena, c.Maszyna, c.Indeks };
            var warunek3 = from c in polaczenie.matrices where (c.Operator == comboBox1.Text)&(c.Indeks==comboBox2.Text) orderby c.Ocena select new { c.Operator, c.Ocena, c.Maszyna, c.Indeks };
            if(string.IsNullOrEmpty(comboBox2.Text))
            {
                dataGridView1.DataSource = warunek1.ToList();
            }
            else
            if(string.IsNullOrEmpty(comboBox1.Text))
            {
                dataGridView1.DataSource = warunek2.ToList();
            }
            else
            if (comboBox1 != null || comboBox2 != null)
            {
                dataGridView1.DataSource = warunek3.ToList();
            }


        } 

1 użytkowników online, w tym zalogowanych: 0, gości: 1