在linqDataSource上搜索有时需要2次点击

时间:2011-09-07 20:28:50

标签: c# asp.net linq-to-sql search

我有一个带linqdatasource和gridView的页面。 有几个文本框可以输入搜索条件。 LinqDataSource_OnSelecting事件按以下方式过滤查询:

var query = from d in db.PersonData 
            select d;

if (textBoxName.Text != "")
    var query = query.where(p => p == textBoxName.Text); 

if (textBoxPhone.Text != "")
    var query = query.where(p => p == textBoxPhone.Text); 

e.Result = query;

btnSearch_Click事件具有以下代码:

gridView.DataBind();

大部分时间都很好用,但有时我必须单击两次搜索按钮才能看到结果。我第一次点击搜索,gridView是空的!第二次我有正确的结果。 希望你能澄清为什么它有时会这样。 谢谢!

2 个答案:

答案 0 :(得分:1)

如果您手动绑定Gridview-Datasource而不使用dataset,则必须始终在页面加载中绑定Gridview-Datasource

  

在web(asp.net)中它不像Win-app,你不能在没有Page-Load事件的情况下将Datasource绑定到网格。

As solution: 您可以使用Updatepanle并将您的网格放入其中。并在绑定后使用GridName.DataBind()

答案 1 :(得分:0)

有时,您最有可能获得空白的原因是您所处的页面超出了搜索结果。

例如:您在未过滤结果的第10页上,点击Search,并获得仅5页的结果。因此,您当前正在查看的页面(10)为空白。

LINQ语句完成后,您需要将GridView重置回第一页。

第二个(可能的)问题是您无法保证所有事件处理程序的顺序。 (请参阅Page Life Cycle。),您不能指望LinqDataSource_OnSelectingbtnSearch_Click先触发,DataBind位于{{ 1}}处理程序。 消除 Click事件处理程序(或将其留空),然后使用LinqDataSource.OnSelected代替,btnSearch_Click之后肯定会触发:

LinqDataSource.OnSelecting