2011-05-24 36 views
1

我有一个包含编辑,删除和添加的ListView。这里的一切都很好,但是List太大了,我想用文本框和按钮给用户一个serach功能。Asp.net实现ListView控件的搜索功能

当用户单击搜索按钮时,List视图按搜索条件进行过滤。

有人可以帮助我实现这个请。 谢谢

+0

你想过滤客户端还是服务器端?前者将是一个更流畅的UX,后者可能更容易。 – David 2011-05-24 11:42:42

+0

客户端请。 – 2011-05-24 12:03:30

回答

0

那么,你必须知道你的基础结构;说你是渲染表,你需要通过每行编写JavaScript中循环,并做一些事情,如:

$("#table").find("tbody > tr").each(function() { 
    var row = this; 
    //loop through the cells, do the string match 
    var tds = $(this).find("td"); 
    //match the inner HTML of the td to the search criteria, depending on how 
    //your search critiera is setup   

    //if not found 
    $(this).css("display", "none"); //hide the row 
}); 
+0

谢谢,但我正在寻找开箱ASP.NET ListView Control Serch功能(如果有的话) – 2011-05-24 12:37:05

+0

有没有开箱即用的功能。你必须做这项工作。 – 2011-05-24 13:29:29

1

(在回答有关问题的意见......)

上取决于很多你的DOM结构。您需要知道ListView如何布置其元素。例如,如果它们都是div元素,那么您需要知道您的JavaScript代码。 (我要去承担使用jQuery的,因为它是一个安全的假设,这些天。)

从本质上讲,你的过滤器都将有至少一个文本输入元素:

<input type="text" id="searchFilter" /> 

你也可以有一个按钮进入过滤器,但为了简便起见我们只滤波器作为用户类型:

$(document).ready(function() { 
    $('#searchFilter').keyup(function() { 
    // Here you would do your filtering. 
    }); 
}); 

对于过滤本身,你可以使用:contains()选择。查看关于它的信息here。基本上,你会隐藏所有的元素,然后显示匹配的元素。像这样(未经):

$('#parentDiv div').hide(); 
$('#parentDiv div:contains(' + $('#searchFilter').val() + ')').show(); 

的想法是隐藏所有孩子的div(您的选择可能需要更加具体,这取决于你的DOM),然后显示匹配过滤器的人。当然,不要忘记,如果过滤器文本为空,则有一个默认情况下显示全部。

0

这取决于你如何使你的ListView的,但如果你渲染一张桌子和想做的事,你可以使用一个jQuery插件,如UI Table Filter

+0

我正在寻找开箱即用的ASP.NET ListView Control Serch功能。 – 2011-05-24 12:20:28

0

过滤客户端最终使用这样的:

protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    DS.SelectCommand = 
     "SELECT ReportName, ReportType, 
     FROM Table 
     WHERE ReportName LIKE @param 
     ORDER BY ReportType Desc"; 
    DS.SelectParameters.Add("Param", searchTxtBox.Text.Replace("'", "''")); 
    DS.DataBind(); 
    ListView1.DataBind();    
}