2012-03-30 10 views
0

結果を制限するグリッドビューで検索しました。私はグリッドビューがすべてのエントリを再作成するようにしたいと思います。検索ボックスが空または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

データソースを再度取得し、データソースとして設定してから再度バインドする必要があります。

MyService.GetSearchResults方法はあなたに検索キーに基づいて、有効な検索結果が返されますと仮定すると、この

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 

ような何か。

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()が呼び出される前に常にデータソースを設定する必要があります。

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

をあなたは宣言型データソースを使用している場合は、あなただけのことができます:あなたはまた、セッションにObjectDataSource1を保存して、結合のために、後でそれを使用することができます

StaffDetailsStaffGridView.DataSource = ObjectDataSource1 
StaffDetailsStaffGridView.DataBind() 

GridViewに再度DataBind()と電話してください:

StaffDetailsStaffGridView.DataBind() 
関連する問題