使用下拉列表和文本框筛选的网格视图搜索?

4
先生/女士,我现在的问题是我想使用下拉列表和文本框来过滤页面上的网格视图。
我的意思是,我们可以编写像这样的SQL语句:
Select  * from student where roll_no = 101;

好的,现在我希望列(上面语句中的roll_no)应该通过下拉列表选择并且值(上面语句中的101)应该由文本框输入。

简而言之,我想通过单击按钮使用下拉列表和文本框的值来填充我的网格视图。

开发时我使用数据集和表适配器,请帮助我完成这个功能。

2个回答

1

我使用下拉列表(组合框)和文本框来过滤我的DataGridView,并且我认为这就是您要找的。

首先,填充您的DataGridView。您提到您正在使用DataSetTableAdapters。我猜您正在使用BindingSource将数据绑定到DataGridView。如果是这种情况,那么您可以通过BindingSource对数据进行Filter

我的设置类似于以下内容:

enter image description here

我的组合框包含我想在筛选器中使用的字段,文本框是我将应用的值。组合框中的值是用户友好的名称,因此他们将了解他们正在过滤哪个字段。

应用筛选器的代码如下:

private void ApplyFilter()
{
     var filterEntered = FilterTextBox.Text.Trim().ToLower();

     MyBindingSource.RemoveFilter(); // remove previous filter

     string filterText = string.Empty;
     string filterComboText = string.Empty;

     switch (FilterComboBox.Text)
     {
         case "Profile":
            filterComboText = "TSProfile"; // column name in the query
            break;
         case "User Id":
            filterComboText = "TSUserId";
            break;
         case "Center":
            filterComboText = "TSCenter";
            break;
         case "Prefix":
            filterComboText = "TSPrefix";
            break;
     }

     filterComboText = filterComboText + " = '";

     filterText += (string.IsNullOrEmpty(filterComboText) ? string.Empty : filterComboText);
     filterText += (!string.IsNullOrEmpty(filterText) && !string.IsNullOrEmpty(filterEntered) ? filterEntered + "'" : string.Empty);

     MyBindingSource.Filter = filterText;
}

基本上它所做的是获取组合框的文本名称,然后获取文本框中的文本,并将过滤器应用于绑定源。 MSDN 上有一篇关于过滤的文章,其中包含完整的示例代码。
我建议的一件事是为用户提供一种轻松删除过滤器的方法,我使用一个“删除过滤器”按钮。

0

如果您先展示一些代码的话会更有帮助。

您可以尝试以下方法:

在您的代码后端中,向下拉列表添加项目。

List<yourObject> list = new List<yourObject>();
foreach (yourObject i in list)
 {
  DropdownList1.Items.Add(new ListItem("" i.name, "" + i.id));
 }

这里只是举个例子,i.name 可能是某个学生的姓名,i.id 则是与该学生相关联的 ID。

确保您的下拉列表的 autopostback 属性设置为 true,像这样:

 <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
        onselectedindexchanged="DropDownList1_SelectedIndexChanged">

然后在您的下拉列表的选定索引更改事件中,执行以下操作:

 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
yourDataControl.DataSource = someMethod(Convert.toInt32(DropDownList1.SelectedValue));
yourDatacontrol.DataBind();
}

就像我说的那样,我不完全确定你想做什么或者你是怎么做的。 按照我描述的方式,你不需要在文本框中输入某个值,通过选择下拉列表中的项目,你将自动获得一个值:在这种情况下,它是与下拉列表中所选项目相关联的ID。


先生/女士,当然我已经填好了下拉列表。但实际问题是,我想使用非关键属性来过滤数据库。 - user1366330

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接