【问题标题】:Using a combobox for search criteria使用组合框作为搜索条件
【发布时间】:2010-10-15 13:36:34
【问题描述】:

我对 winforms 和 C# 比较陌生,我正在开发一个允许用户执行搜索的应用程序。要搜索数据,他们可以使用以下方法:

-具有 6 个选项的组合框

-他们将根据选择的组合框搜索输入信息的文本框。

我有一个存储过程,每个搜索选项都有一个参数。该过程适用于搜索任何选项。此过程已添加到项目中,我通过 TableAdapter 连接到它。

我正在努力将这些搜索条件中的每一个传递给代码的最佳方式。我是这样开始的:

public void DataRefresh(string searchCombo, string searchValue)
    {
        string returnMessage = string.Empty;
        switch (searchCombo)
        {
            case "Acct":
                Data.Manager.TAM.SearchDataTableAdapter.Fill(DataSet.spSearchData, ref returnMessage, searchValue, null, null, null, null, null);
                break;
        }
        SearchDataBindingSource.DataSource = DataSet.spSearchData;
    }

我最初认为我可以根据用户发送的内容使用 switch/case 来传递参数。

有没有更好的方法来做到这一点?我想是的,但我似乎想不出办法。

任何建议都会很棒!

【问题讨论】:

    标签: c# winforms combobox


    【解决方案1】:

    我想出了另一种方法,我没有将 6 个参数传递给存储过程,而是将其更改为只传递两个组合框值和文本框值。然后我将 If 语句放在存储过程中以处理传递的值。

    感谢您的帮助。

    【讨论】:

      【解决方案2】:

      您的代码示例表明您没有将 GUI、业务逻辑、域对象和数据层彼此分开。这将是一个更灵活的架构设计,但无论如何,这不是您所关心的问题。

      在我看来,searchCriteria 可以是一个对象,从而使其可重复用于其他搜索。

      遵循@saurabh 的建议,可以使其更易于使用,如果您使用的是 .NET 3.5,请在搜索中使用 Linq 查询。

      然后,您的 ComboBox 应包含此搜索对象的属性名称,然后您可以这样:

      public void DataRefresh(string comboBoxPropertyName, object value) {
          var query = from s in searchResults
                      where (s.GetType().GetProperties()[comboBoxPropertyName].GetValue(s) = value)
                      select s
      
          SearchDataBindingSource.DataSource = query.ToList();
      }
      

      searchResults 代表你的 SP 的结果。也许你的 TableAdapter 需要一个演员,我不知道。我没用过这个类。

      免责声明:此代码是在我脑海中按原样提供的,未经编译。此代码目的仅用于表达一种观点,不应被视为绝对解决方案,因为我不知道您是否可以使用您决定使用的对象以这种方式工作,但我确实希望这简化了您的操作。

      【讨论】:

        猜你喜欢
        • 2011-04-21
        • 1970-01-01
        • 2013-03-30
        • 2012-12-22
        • 1970-01-01
        • 2016-12-02
        • 1970-01-01
        • 1970-01-01
        • 2016-06-20
        相关资源
        最近更新 更多