【问题标题】:Filter GridView with Textbox使用文本框过滤 GridView
【发布时间】:2015-11-12 23:35:54
【问题描述】:

我在网格视图中显示了一些数据,一切正常。但是,我正在尝试包含一个带有搜索按钮的文本字段,以便用户能够按名称(这是表的第一列)过滤数据。因此,例如,用户将输入“James”,然后只显示名称为 James 的条目。 这是我的代码:

<asp:Button ID="Button1" runat="server" Text="Filter" OnClick="Button1_Click" />
          <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true"></asp:TextBox>


       <asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" DataSourceID="ObjectDataSource1" >
        <Columns>
            <asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" SortExpression="Name" >
            <HeaderStyle Width="450px" />
            <ItemStyle HorizontalAlign="Center" Height="100px" Width="400px" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" />
            </asp:BoundField>
            <asp:BoundField DataField="Title" HeaderText="Title" ReadOnly="True" SortExpression="Title" >
                <ItemStyle Width="400px" HorizontalAlign="Center" Height="100px" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" />
                </asp:BoundField>

        </Columns>

        <HeaderStyle BackColor="#002d57" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="White" ForeColor="#002756" HorizontalAlign="Left" />
        <RowStyle ForeColor="#002756" />

    </asp:GridView>
   <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData" TypeName="Test"></asp:ObjectDataSource>

在后面的代码中,我尝试过类似的操作,但它仍然显示了表格的所有结果,而不是我专门搜索的结果:

  protected void Button1_Click(object sender, EventArgs e)
{
    try
    {
        ((DataTable)GridView1.DataSource).DefaultView.RowFilter = "Name like '%" + textBox1.Text.Trim() + "%' ";
    }
    catch (Exception) { }

}

有什么建议可以实现吗?

【问题讨论】:

  • 为什么不直接设置GridView1.RowFilter = string.Format("Name LIKE '%{0}%' , textBox1.Text);
  • @MariaL :只是一件小事:Button1_Click 中的 try/catch 隐藏了所有异常......您应该显示或不隐藏它们。因为它可能是你问题的原因

标签: c# asp.net gridview


【解决方案1】:

你也可以这样做

DataView dv = ((DataTable)dataGridView1.DataSource).DefaultView;
dv.RowFilter = "Name LIKE '%" + textBox1.Text + "%'";
dataGridView1.DataSource = dv;
dv.DataBind();

【讨论】:

  • 我收到此错误:System.Data.DataView' 不包含'DataBind' 的定义,并且没有接受'System.Data.DataView' 类型的第一个参数的扩展方法'DataBind' 可能是找到
  • 检查你的using declaration in your headerusing System.Data
  • using 声明没问题,令人困惑
【解决方案2】:

// 绑定gridview时将DataTable保存在会话中

// 会话["Dt_GridView"]=Your_datatable;

并尝试以下代码

 protected void Button1_Click(object sender, EventArgs e)
    {

        try
        {
            DataTable dt = (DataTable)Session["Dt_GridView"];
            dt.DefaultView.RowFilter = "Name like '%" + textBox1.Text.Trim() + "%' ";
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
        catch (Exception ex) { }

    }

更新

在使用 ObjectDataSource 时,可以直接调用 FilterExpression 方法,如下所示

 protected void Button1_Click(object sender, EventArgs e)
        {
            if (TextBox1.Text != "")
            {

                ObjectDataSource1.FilterExpression = "Name LIKE '%" + TextBox1.Text + "%'";

            }

        }

【讨论】:

  • 是的,我试过了,但仍然没有任何反应。这可能是我忽略的一些小东西
  • 感谢您的更新-唯一的问题是 Select 方法返回一个 List 所以它不起作用
  • 如果你使用 List 然后使用 LinqDataSource
【解决方案3】:

试试这个

((DataTable)GridView1.DataSource).DefaultView.RowFilter.Contains(textBox1.Text);

【讨论】:

  • 对不起,它不起作用,它仍然显示整个表格而不是我搜索的结果
猜你喜欢
  • 1970-01-01
  • 2014-11-17
  • 2018-03-14
  • 2013-07-29
  • 2011-05-08
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多