我对winforms和C#相对较新,我正在开发一个允许用户执行搜索的应用程序。要搜索数据,可以使用以下内容:
-Combobox有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根据用户发送的内容传递参数。
有更好的方法吗?我想是的,但我似乎无法想办法。
任何建议都会很棒!
答案 0 :(得分:1)
我想出了另一种方法,而不是将6个参数传递给存储过程,我将其更改为只传递两个组合框值和文本框值。然后我在存储过程中放置If语句来处理传递的值。
感谢您的帮助。
答案 1 :(得分:1)
您的代码示例表明您没有将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需要演员。我从未使用过这门课。
免责声明:此代码是按照我的头脑中未编译的原样提供的。这个代码的目的只是为了表达一个观点,不应该被认为是绝对的解决方案,因为我不知道你是否有可能以你决定使用的对象的方式工作,但我希望这简化了您的工作方式。