2012-03-30 65 views
0

我有一个搜索网格视图,它限制了结果。我希望网格视图重新填充所有条目,如果a。搜索框为空或b。用户点击一个按钮刷新。搜索后刷新gridview

Protected Sub btnSeach_Click(sender As Object, e As EventArgs) Handles btnSeach.Click 
    StaffDetailsStaffGridView.DataSourceID = "" 
    StaffDetailsStaffGridView.DataSource = ObjectDataSource1 
    StaffDetailsStaffGridView.DataBind() 


    If txtFnameSearch.text = " " Then 
     StaffDetailsStaffGridView.DataBind() 
    End If 
End Sub 

Protected Sub btnRefreshSearch_Click(sender As Object, e As EventArgs) Handles btnRefreshSearch.Click 
    StaffDetailsStaffGridView.DataBind() 
End Sub 
End Class 

StaffDetailsS​​taffGridView.DataBind()显然不起作用。

我该如何正确地做到这一点?

回答

0

您应该再次获取数据源并将其设置为DataSource,然后重新绑定。

像这样的事情

Protected Sub btnRefreshSearch_Click(sender As Object, e As EventArgs) Handles btnRefreshSearch.Click 

    Dim searchKey as String 
    searchKey =txtFnameSearch.Text.Trim() 
    Dim staffSearchREsults=MyService.GetSearchResults(searchKey) 
    StaffDetailsStaffGridView.DataSource = staffSearchREsults 
    StaffDetailsStaffGridView.DataBind() 

End Sub 

假设MyService.GetSearchResults方法将返回基于搜索键有效的搜索结果。

1

重新填充GridView的最好方法是通过一种专门用于绑定数据和在需要时调用的方法。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostback) 
     BindGrid(); 
} 

private void BindGrid() 
{ 
    StaffDetailsStaffGridView.DataSource = ObjectDataSource1; 
    StaffDetailsStaffGridView.DataBind(); 

} 

protected void btnRefreshSearch_Click(object sender, EventArgs e) 
{ 
    BindGrid(); 
} 

protected void btnSeach_Click(object sender, EventArgs e) 
{ 
    if (!String.IsNullOrEmpty(txtFnameSearch.text)) 
    { 
     BindGrid(); 
    } 
} 

我假设你通过ObjectDataSource直接过滤数据。

0

这将不起作用,因为回发后,gridview的数据源将会丢失。所以你总是需要在调用DataBind()之前设置数据源。

StaffDetailsStaffGridView.DataSource = ObjectDataSource1 
StaffDetailsStaffGridView.DataBind() 

您还可以保存到ObjectDataSource1会议,并随后将其用于绑定:

Session["MyObjectDataSource"] = ObjectDataSource1; 

...

Protected Sub btnRefreshSearch_Click(sender As Object, e As EventArgs) Handles btnRefreshSearch.Click 
    StaffDetailsStaffGridView.DataSource = Session["MyObjectDataSource"] 
    StaffDetailsStaffGridView.DataBind() 
End Sub 
0

如果您使用的是数据源的声明,你可以请致电DataBind()再登录GridView

StaffDetailsStaffGridView.DataBind()