使用AJAX重新绑定gridview(无回发)

时间:2010-10-27 20:41:34

标签: c# asp.net ajax gridview sqldatasource

我计划允许用户打开包含带有Filter文本框的gridview的modalpopupextender。我想要它,所以当用户键入过滤器时,过滤器将应用于gridview,然后更新gridview的内容以反映应用的过滤器 - 所有这些都不会回发。理想情况下,gridview将在用户输入时进行过滤,而不必按下按钮。

我猜它会在我的SqlDataSource和UpdatePanel上使用FilterParameters,但任何人都可以提供更详尽的解释我将如何做到这一点?如果我使用的代码是“通用”并且可以与任何其他GridView和DataSource一起使用,那也很好。

由于

3 个答案:

答案 0 :(得分:2)

你不能将gridview包装在updatepanel中,然后在textbox上用过滤器重新绑定数据源吗?

答案 1 :(得分:1)

将gridview放在UpdatePanel中,将TextBox放在它外面。向该面板添加一个隐藏按钮,这是一个异步触发器,然后将javascript onchange添加到文本框中以单击该按钮。

  <asp:Button ID="DoRefresh" style="display:none;" UseSubmitBehavior="false"
 runat="server" OnClick="Recalculate()" />

在Page_Init中:

    myTextBox.Attributes.Add("onChange",
"document.getElementById('" + DoRefresh.ClientID + "').click()");

将重新绑定代码放入Recalculate()

应该这样做。我确信有更好的方法可以做到这一点,但是如果你想使用像GridView这样的服务器端控件,我认为你会遇到部分回发来更新它。但是,请注意,您确定要在每次键入字母时运行查询吗?

编辑 - 让我补充一点,我认为使用jQuery插件或其他一些客户端解决方案与ajax,正如另一个答案所暗示的那样,使用这种方式更有意义。这不是UpdatePanels的用途,每次键入一个字母时,您都会进行回发(尽管是部分的)。但是回发是告诉服务器端代码更新页面的唯一方法。

答案 2 :(得分:1)

每次用户键入字母时,您都会访问服务器并运行查询。这可以快速实现昂贵。你在使用像jQuery这样的javascript框架吗?大多数框架都有一个数据表,它包含<table>标记,具有这种功能。

快速谷歌搜索为jQuery找到了这个:http://www.datatables.net/ (还有其他一些,dojo和yui也有自己的)

您可以执行以下操作:

$(document).ready(function(){
  $('#<% = GridView1.ClientID%>').dataTable();
});

请注意,此解决方案也存在缺陷,具体取决于数据集的大小。