我有一个带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是空的!第二次我有正确的结果。 希望你能澄清为什么它有时会这样。 谢谢!
答案 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_OnSelecting
或btnSearch_Click
先触发,DataBind
位于{{ 1}}处理程序。 消除 Click
事件处理程序(或将其留空),然后使用LinqDataSource.OnSelected
代替,btnSearch_Click
之后肯定会触发:
LinqDataSource.OnSelecting