2013-06-06 3 views
0

У меня есть следующие GridView:магазин GridView

asp:GridView ID="GridView1" 
    runat="server" 
    AutoGenerateColumns="False" 
    DataKeyNames="ID" 
    gridlines="None" 
    cellpadding="15" 
    width="980px" 
    ItemStyle-backcolor="#ebecf0" 
    AlternatingItemStyle-backcolor="#ebecf0" 
    AllowPaging="True" 
    PageSize="4" 
    onpageindexchanging="GridView1_PageIndexChanging" 
    datasourceid="SqlDataSource2" 
    > 

И это выберите команду:

"SELECT * FROM [tbl_Project] INNER JOIN tbl_Cat  
ON tbl_Project.CatID = tbl_Cat.Cat_ID 
INNER JOIN tbl_Klant 
ON tbl_Project.KlantID = tbl_Klant.Klant_ID 
WHERE (([Titel] LIKE '%' + @Titel + '%') 
AND ([CatID] = CASE WHEN @CatID = -1 THEN [CatID] ELSE @CatID END) 
AND ([Bedrijf] LIKE '%' + @Bedrijf + '%') 
AND ([Website] LIKE '%' + @Website + '%'))" 

Это позволяет пользователю осуществлять поиск записей в базе данных. В GridView1 я Хейвея кнопку детали:

<asp:LinkButton ID="klant" runat="server" 
    Text='<%#Eval("Bedrijf") %>' 
    PostBackUrl='<%# "klant_wijzigen.aspx?Klant_ID="+Eval("Klant_ID").ToString()%>'> 
    </asp:LinkButton> 

это берет пользователь на новую страницу с подробностями этого определенных тематического списка (на основе ID)

ВОПРОСА

Но когда пользователь клики по «назад» результаты морфинга очищаются. Как сохранить сохраненные записи и отобразить их на странице Load.

Я пробовал это через куки-файлы и сеанс, но это работает.

EDIT

моя Sesion попытка:

Session("Test") = GridView1 
GridView1 = Nothing 

' Retrieve GridView from Session 
GridView1 = DirectCast(Session("Test"), GridView) 
GridView1.DataBind() 
+0

сессией является лучшим способом, но вместо того, чтобы сохраняя весь «GridView» в вашей сессии, просто сохраните значения параметров, которые вы используете, в свое предложение «where», когда вы вернетесь, просто повторно назначите эти параметры вашему запросу и снова привяжите сетку. – Rahul

+0

И как именно я это делаю, вместо GridView text-boxes.text? у вас есть учебник (dont really like snippets) – ErikMes

+0

У меня нет учебника, но я сделал то же самое на моей руке, если вы захотите, я могу дать вам немного помочь. Это будет очень легко, Также упоминается ' vb' в свой тег вопроса. – Rahul

ответ

1

Сначала попробуйте использовать OnClientClick событие LinkButton вместо PostBackUrl. Когда вы нажмете на LinkButton, то на нем OnClientClick мероприятие сделайте несколько шагов.

1) Сохраните значения параметров, которые вы передаете в Select Query, в Session.
Он может прийти из любого места, как из Textbox's, Label's и т.д. etc.If он пришел из управления затем хранить в сессии, как

Session("Bedrijf") = Bedrijf.Text 

Здесь я предполагаю, что Bedrijf значение происходит от TextBox удостоверения личности Bedrijf.Text .so я Сохраните это значение в session. Просто сохраните остальные элементы управления.

Примечание: - Сохраняйте только те значения, которые были использованы в выбранном запросе.

После сохранения всех значений в сеансе. Вы просто перенаправляете его на следующую страницу.

2) На странице2 сделайте все, что захотите.

3) On back button щелкните также установите pagename в свои session переменных.Сейчас вы находитесь на page2.aspx так установить его имя в session как

Session("prevpagename") = "Page2" 

4) После нажатия кнопки назад он будет перенаправлять на ту же страницу, как page 2 to page 1, теперь вот на page 1Page_Load события связывает ваши grid view снова как

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     If Not Page.IsPostBack Then 
      // Here firstly check the session variables for `pagename` 
      If Session("prevpagename") = "Page2" Then 
      // then directly assign the values of the parameters that you have store in session in select query. 
      // After retereiving the values from the database filter by the parameters you have passed bind your `Grid View` again like 
      gridview.DataSource = reader2 
      gridview.DataBind() 
      // Here reader2 is having the all return data that comes from your select query.You may save them on `DataTable`,`DataSet` as well and directly assign it to `DataSource` event of `GridView`. 
      Else 
      // another code. 
      End If 
     End If 
End Sub 

Вы должны следить за этим типом сценария.

Надеюсь, вы понимаете и работают на вас.

+0

Будет ли это работать, даже когда .text = Null? Они должны заполнить все поля. – ErikMes

+0

хранить каждое значение в 'session', но когда вы будете назначать эти значения для запроса, тогда также проверяйте« Null ». – Rahul

+0

Oke большое спасибо! Но я потерян в пункте 3 – ErikMes

0

Session ("Test") = GridView1

Я думаю, что это плохо, вместо сохранения запроса на выборку в перенаправление сеанса b4, также настройте страницу подробностей для перенаправления с строковым значением somequery, чтобы вы знали, что вам нужно использовать selec t запроса из сеанса.

+0

Я не герой с SQL, было бы здорово, если бы вы могли указать мне в правильном направлении или хороший поток об этом (искал мою задницу) – ErikMes

1

Попробуйте Cache ваши столы. Как Cache["SOURCE"] = YourSearchDataTable; затем вызвать его литьем, как это:

DataTable dt = (DataTable)Cache["SOURCE"]; 
GridView1.DataSource = dt; 
GridView1.DataBind(); 

Просто предложение и альтернатива сессии и печенье.

+0

Я помещаю кеш в событие search_click? – ErikMes

+0

Да. Вы можете поместить это событие onClicked, тогда вы можете получить его, когда захотите. –

+0

И как его получить? – ErikMes

0

Я получил это фиксированный, храня сессию по изменению SelectedIndex, как это:

Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
    Session("Categorie") = DropDownList1.SelectedValue 
End Sub 

Protected Sub txtKlant_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
    Session("Klant") = txtKlant.Text 
End Sub 

Protected Sub txtWebsite_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
    Session("Website") = txtWebsite.Text 
End Sub 

Protected Sub txtTitel_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
    Session("Titel") = txtTitel.Text 
End Sub 

и затем вызвать его обратно на Page_Load Лик это:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
    Cookie() 

    If Not Page.IsPostBack Then   
     DropDownList1.SelectedValue = Session("Categorie") 
     txtKlant.Text = Session("Klant") 
     txtWebsite.Text = Session("Website") 
     txtTitel.Text = Session("Titel") 
     GridView1.DataBind() 
    End If 

End Sub