Проблема с несколькими критериями в bindingsource.filter - PullRequest
0 голосов
/ 01 мая 2011

Я пытаюсь отфильтровать источник привязки на основе 2 списков. У меня один из фильтров со списком просто отлично. Второй выводит меня в тупик, поскольку он использует первый выпадающий список, а затем второй, основанный на операторе switch:

    private void comboBox2_SelectedIndexChanged(object sender,
    System.EventArgs e)
    {
        string sItem;
        sItem = comboBox2.SelectedItem.ToString();

        switch (sItem)
        {
            case "Banks":
                propertyInformationBindingSource.Filter = ("ClientKey ='" + comboBox1.SelectedValue + "'" And "Search = -1");
                break;
            case "Exam":
                propertyInformationBindingSource.Filter = ("ClientKey ='" + comboBox1.SelectedValue + "'") And ("Exam = -1");
                break;
            case "Search Finished":
                propertyInformationBindingSource.Filter = ("ClientKey ='" + comboBox1.SelectedValue + "'") And ("Finished = -1;
                break;
            case "All":
                propertyInformationBindingSource.Filter = "ClientKey ='" + comboBox1.SelectedValue + "'";
                break;


        }
    }

У меня возникли проблемы со значением после AND, в котором указано, что оно неверно. Любая помощь будет великолепна.

Спасибо

1 Ответ

2 голосов
/ 01 мая 2011

Я думаю, что были некоторые проблемы конкатенации строк, и вы пропустили закрывающую скобку вокруг Finisher = -1.

Попробуйте

 switch (sItem)
        {
            case "Banks":
                propertyInformationBindingSource.Filter = ("ClientKey ='" + comboBox1.SelectedValue + "' And Search = -1");
                break;
            case "Exam":
                propertyInformationBindingSource.Filter = ("ClientKey ='" + comboBox1.SelectedValue + "' And Exam = -1");
                break;
            case "Search Finished":
                propertyInformationBindingSource.Filter = ("ClientKey ='" + comboBox1.SelectedValue + "' And Finished = -1");
                break;
            case "All":
                propertyInformationBindingSource.Filter = "ClientKey ='" + comboBox1.SelectedValue + "'";
                break;


        }

Обратите внимание: если у вас слишком много конкатенации строк, лучше всего использовать string.Format(). Это улучшает читаемость и более эффективно, чем конкатенация. Например, ваш первый случай выглядел бы так:

propertyInformationBindingSource.Filter = 
      string.Format("ClientKey ='{0}' And Search = -1", comboBox1.SelectedValue);
...