2011-09-07 52 views
0

我有一個頁面linqdatasource和一個gridView。 有幾個文本框可以輸入搜索條件。在linqDataSource上搜索需要2次點擊有時

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事件具有以下代碼: LinqDataSource_OnSelecting事件通過這樣的篩選查詢

gridView.DataBind(); 

它的工作原理相當不錯的大部分時間,但有時我必須點擊搜索按鈕兩次,看結果。我第一次點擊搜索,gridView是空的!第二次我有正確的結果。 希望你能澄清爲什麼有時候會這樣。 謝謝!

+0

您確認您的按鈕事件觸發第一次點擊?你在某處遇到錯誤嗎? – Hammerstein

+0

沒有任何錯誤。我不明白的是,大多數時候搜索按需要工作。事實上,我有這樣的類似問題:[link](http://www.eggheadcafe.com/community/aspnet/7/10070097/search-on-linq-datasource-not-working-correctly.aspx)沒有解決我在這個網站上的問題。 – Saibot

回答

1

如果您手動綁定Gridview-Datasource而不使用dataset您必須始終在頁面加載中綁定Gridview-Datasource

在web(asp.net)中,它不像Win-app,不能將Datasource綁定到沒有Page Load事件的網格。

As solution:可以使用Updatepanle,並把你的網格在這。並在綁定後使用GridName.DataBind()

0

最有可能的原因是你只有空白,有時候,你在一個頁面上,搜索將產生結果。

例如:你在未過濾結果的第10頁,打Search,,只得到5頁的結果。因此,您當前正在查看的頁面(10)是空白的。

LINQ語句完成後,您需要將GridView重置回第一頁。

第二個(可能的)問題是您無法保證所有事件處理程序的順序。 (見Page Life Cycle。)即,,您不能指望LinqDataSource_OnSelectingbtnSearch_Click第一次觸發,並且您在Click處理程序中有DataBind消除btnSearch_Click事件處理程序(或留空),並使用LinqDataSource.OnSelected,相反,這將LinqDataSource.OnSelecting後肯定火:

protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e) { 
    gridView.DataBind(); 
    gridView.PageIndex = 0; // back to beginning when searching 
}