50 messaggi dal 11 settembre 2003
Ciao a tutti!Ho un problema per quanto riguarda il paging..
Dunque:
Ho una pagina in cui si vedono una serie di appuntamenti.
La prima volta che viene caricata la pagina viene pololato il datagrid con tutti gli appuntamenti. Qui il paging funziona correttamente. Muovendomi sui numerini sotto scorro le pagine.

Sulla stessa pagina posso fare una ricerca.
Il risultato viene messo nel datagrid e sembra che il paging funzioni..
Ma in realtà quando clicco sul menù per scorrere le pagine successive mi vengono ricaricati tutti i valori.


Come posso risolvere questo problema?
Grazie!
Questo è il codice:

Sub Page_Load

if session("admin") is nothing
response.redirect ("login_admin.aspx")
end if

If Not IsPostBack Then
AggiornaDati
popola_drop
carica_categorie

End If


End Sub

''''''''''''''''''''''''''''''''''''''''''''


Sub AggiornaDati 'carica i dati nel datagrid
Dim conn As SqlConnection
Dim dadagenda As SqlDataAdapter
Dim dstagenda As DataSet
Dim sql As String

sql="SELECT distinct comuni.nome, agenda_data.data, agenda.id_agenda, agenda.titolo, agenda.id_cat FROM agenda INNER JOIN agenda_data ON agenda.id_agenda = agenda_data.id_agenda INNER JOIN comuni ON agenda.id_comune = comuni.id_comune "

Dim connString as String =ConfigurationSettings.AppSettings("constr")
conn= New SqlConnection(connString)



dadagenda = New SqlDataAdapter( sql, conn )
dstagenda = New DataSet
dadagenda.Fill( dstagenda )



dgagenda.DataSource = dstagenda
If dgAgenda.Items.Count Mod dgAgenda.PageSize = 1 And _
dgAgenda.CurrentPageIndex = dgAgenda.PageCount - 1 And _
dgAgenda.CurrentPageIndex <> 0 Then
dgAgenda.CurrentPageIndex = dgAgenda.CurrentPageIndex - 1
End If

dgagenda.DataBind()

if dgagenda.items.count>0 then
msg1.text=""
else msg1.text="Non ci sono appuntamenti nell'agenda"

end if

conn.Close()
End Sub


'''''''''''''

Sub dgagenda_pageindexchanged(s As Object, e As DataGridPageChangedEventArgs) 'indice delle pagine

dgagenda.CurrentPageIndex=e.NewPageIndex
AggiornaDati
end sub


Sub DataGrid_ItemCreated(Sender As Object, e As DataGridItemEventArgs) ' intercetta il bottone cancella e inserisce la conferma della cancellazione
Select Case e.Item.ItemType
Case ListItemType.Item, ListItemType.AlternatingItem, ListItemType.EditItem
Dim myDeleteButton As LinkButton
myDeleteButton = e.Item.FindControl("b_elimina")
myDeleteButton.Attributes.Add("onclick","return confirm('Sei sicuro di voler cancellare l?appuntamento dall?agenda?');")
End Select

If e.Item.ItemType = ListItemType.Pager Then ' personalizzo il paging

Dim wc As WebControl
Dim cnt As Integer
Dim pager As TableCell
Dim lnk As LinkButton
Dim lt As Literal
Dim tc As TableCell
Dim txt As TextBox
Dim btn As Button

pager = e.Item.Controls(0)


For cnt = 0 To pager.Controls.Count - 1 Step 2
wc = pager.Controls(cnt)
If wc.GetType.ToString() = "System.Web.UI.WebControls.DataGridLinkButton" Then
if cnt=0 then
CType(wc, LinkButton).Text = "Pagina: " & CType(wc, LinkButton).Text & ""
else
CType(wc, LinkButton).Text = "" & CType(wc, LinkButton).Text & ""
end if
Else
CType(wc, Label).Text = "<b>" & CType(wc, Label).Text & "</b>"
if cnt=0 then
CType(wc, Label).Text = "Pagina: <b>" & CType(wc, Label).Text & "</b>"
end if

End If
Next
End if

End Sub


'''''''''''''''''''''''''''''''''
Sub cerca_agenda(s As Object, e As ImageClickEventArgs)

Dim conn As SqlConnection
Dim dadagenda As SqlDataAdapter
Dim dstagenda As DataSet
Dim sql As String
dim testo_cerca as string
dim sost as string

testo_cerca=testo.text

if len(testo_cerca)>0 then
testo_cerca=replace(testo_cerca, "'", "?")
sost="%'and agenda.titolo LIKE'%"
testo_cerca=replace(testo_cerca, " ", sost)


end if


' sql="select agenda.id_agenda,agenda.titolo from agenda where agenda.titolo LIKE '%" & testo_cerca & "%' "


sql="SELECT distinct comuni.nome, agenda_data.data, agenda.id_agenda, agenda.titolo, agenda.id_cat FROM agenda INNER JOIN agenda_data ON agenda.id_agenda = agenda_data.id_agenda INNER JOIN comuni ON agenda.id_comune = comuni.id_comune WHERE agenda.titolo LIKE '%" & testo_cerca & "%' "



if dropcategorie.items(dropcategorie.SelectedIndex).Value > -1 then



sql=sql & " and agenda.id_cat = " & dropcategorie.items(dropcategorie.SelectedIndex).Value


end if



dim data as string
if dropgiorno.items(dropgiorno.SelectedIndex).Value > -1 then

if len(dropgiorno.items(dropgiorno.SelectedIndex).Value)>1 then
data=dropgiorno.items(dropgiorno.SelectedIndex).Value
else
data= "0" & dropgiorno.items(dropgiorno.SelectedIndex).Value
end if
end if

if dropmese.items(dropmese.SelectedIndex).Value > -1 then
if len(dropmese.items(dropmese.SelectedIndex).Value)>1 then
data=data & "/" & dropmese.items(dropmese.SelectedIndex).Value
else
data=data & "/0" & dropmese.items(dropmese.SelectedIndex).Value
end if
end if

if dropanno.items(dropanno.SelectedIndex).Value > -1 then
data=data & "/" & dropanno.items(dropanno.SelectedIndex).Value
end if



if len(data)>1 then
sql=sql & " and agenda_data.data LIKE '%" & data & "%'"
end if


Dim connString as String =ConfigurationSettings.AppSettings("constr")
conn= New SqlConnection(connString)
dadagenda = New SqlDataAdapter( sql, conn )
dstagenda = New DataSet
dadagenda.Fill( dstagenda )



dgagenda.DataSource = dstagenda
dgagenda.CurrentPageIndex=0
dgagenda.DataBind()



if dgagenda.items.count>0 then
msg1.text=""
else msg1.text="La ricerca non ha portato risultati"

end if

conn.Close()
testo.text=""

end sub

La guerra è il massacro di persone che non si conoscono, per conto di persone che si conoscono ma non si massacrano..
Da quello che ho capito, AggiornaDati carica tutti i dati dell'agenda nel datagrid mentre cerca_agenda li carica ma filtrandoli, giusto?
Se fai così c'ha ragione. Ogni volta che cambi pagina, devi ricaricare i dati. Ma se nel cambiare pagina richiami AggiornaDati invece di cerca_agenda verranno caricati tutti i dati. Quello che ti consiglio di fare è di usare un unico metodo che in base al contenuto del campo di ricerca esegue o meno la ricerca filtrata. In questo modo anche cambiando pagina esegui il binding corretto dei dati.

Ciao

Il mio blog
Homepage
50 messaggi dal 11 settembre 2003
Hai ragione..
Ho creato un campo nascosto nel quale inserisco la stringa sql.
Quando chiamo la sub aggiornadati gli passo la stringa sql.

La guerra è il massacro di persone che non si conoscono, per conto di persone che si conoscono ma non si massacrano..
No no, occhio, così uno ti prende la stringa sql e ti fa una sql injection. Rileggi sempre il valore dalla textbox oppure salvalo nel viewstate, ma solo la parola chiave.
Occhio eh

Ciao

Il mio blog
Homepage

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.