2012-03-30 2 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 

StaffDetailsStaffGridView.DataBind() явно не работает.

как это сделать правильно?

ответ

0

Вы должны получить источник данных и установить его как источник данных, а затем снова связать.

Что-то вроде этого

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() 
Смежные вопросы