2011-02-26 70 views
0

我想做一個搜索使用LINQ將結果填充到Gridview。與LINQ和數據網格自動完成搜索的問題

這是我的代碼中使用了LINQ的正常工作前:

foreach (DataRow dr in dt.Select("Name like '" + txtSearch.Text + "%'")) 
     { 
      dtable.ImportRow(dr); 
     } 

在我的LINQ的代碼,我用bsUser作爲BindingSource的。

private void txtSearch_TextChanged(object sender, EventArgs e) 
    { 

     string input = txtSearch.Text.Trim().ToLower(); 
     if (input.Length <= 0) return; 

     IList<User> u = (bsUser.Filter? select? 
         .Where(x => (x.Name.ToLower().StartsWith(input) 
         && (x.RoleId == (int)cbRole.SelectedValue))).ToList()); 

     bsUser.DataSource = u;    

    } 

我的問題是,如果u返回0行,然後我的GridView其綁定到bsUser將不再有數據。 datasource.count() = 0

有人能給我一個解決方法或建議,我可以如何解決這個問題?

+0

請確認嗎?當搜索查詢返回NO結果時,您不希望網格更新? – gideon 2011-02-26 04:06:56

+0

如果查詢返回NO結果,我希望網格顯示爲空。 – VeecoTech 2011-02-26 14:47:05

回答

0

嗨,我想我已經通過使用這種方式做到了這一點。看起來不錯..

private void txtSearch_TextChanged(object sender, EventArgs e) 
    { 
     string input = txtSearch.Text.Trim().ToLower(); 
     if (input.Length > 0) 
      bsUser.Filter = "Name like '" + input + "%' AND RoleId = '" + (int)cbRoleSearch.SelectedValue + "'"; 
     else 
      FilterCBRoleSearch(Convert.ToInt16(cbRoleSearch.SelectedValue)); 
    } 
+0

好吧,奇怪..我只能做bindSource過濾器,如果它是有限的datatable。它不能過濾,如果我把它與tolist()綁定。我很好,它與數據表綁定,但我很難在MouseUp事件()上獲取databoundItem當我點擊gridview行。 'tutor =(User)gvTutor.SelectedRows [0] .DataBoundItem;'如果我的gridview受數據表限制,則此行失敗。 dataBoundItem在Tolist()中運行良好 – VeecoTech 2011-02-26 14:18:56