8 messaggi dal 30 gennaio 2012
Salve a tutti,
questo mio post visto che oggi penso di aver risolto un problema che ha "rubato sonno" non soltanto a me, povero novizio!
Vi assicuro che ho cercato parecchio in internet e sui vari forum ed anche su questo non ho trovato una risposta soddisfacente alle mie povere e poche competenze.

SCENARIO:
Si ha una WebForm con inseriti dei campi TextBox, dei Button con cui poter effettuare dei filtri su un GridView sui cui siano stati impostati allowpagin=true e allowsorting=true; tale GridView preleva i dati da un DataSourceSQL opportunamente impostato.
Si desidera quindi fare poter applicare dei filtri con i contenuti dei TextBox mantenendo però i dati filtrati nel GridView con le opzioni di sorting e di pagin in modo appropriato.
Si specifica che per questo codice si è utilizzato Northwind.mdb come DB di prova.

CODICE:

Pagina ASP
----------------------------------------------------
<%@ Page Title="PROVA" Language="vb" MasterPageFile="~/Site.Master" AutoEventWireup="false"
CodeBehind="Default.aspx.vb" Inherits="Prova_dgv._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">


<table>
<tr>
<td width="150px"><asp:Label ID="lblNomeProdotto" runat="server" Text="Nome Prodotto:"></asp:Label></td>
<td width="150px"><asp:TextBox ID="txtNomeProdotto" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td width="150px"><asp:Label ID="lblQuantita" runat="server" Text="Quantità Ordinata:"></asp:Label></td>
<td width="150px"><asp:TextBox ID="txtQuantita" runat="server"></asp:TextBox></td>
</tr>
<tr align="center" >
<td><asp:Button id="btnRicerca" runat="server" Text="Cerca" /> </td>
<td><asp:Button id="btnReset" runat="server" Text="Reset" /> </td>
</tr>
</table>

<br />
<br />

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:connOLEDB_Northwind %>"
ProviderName="<%$ ConnectionStrings:connOLEDB_Northwind.ProviderName %>"
SelectCommand="SELECT * FROM [Prodotti] ORDER BY [NomeProdotto]"></asp:SqlDataSource>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="IDProdotto"
DataSourceID="SqlDataSource1" PageSize="3">
<Columns>
<asp:BoundField DataField="IDProdotto" HeaderText="IDProdotto"
InsertVisible="False" ReadOnly="True" SortExpression="IDProdotto" />
<asp:BoundField DataField="NomeProdotto" HeaderText="NomeProdotto"
SortExpression="NomeProdotto" />
<asp:BoundField DataField="IDFornitore" HeaderText="IDFornitore"
SortExpression="IDFornitore" />
<asp:BoundField DataField="IDCategoria" HeaderText="IDCategoria"
SortExpression="IDCategoria" />
<asp:BoundField DataField="QuantitàPerUnità" HeaderText="QuantitàPerUnità"
SortExpression="QuantitàPerUnità" />
<asp:BoundField DataField="PrezzoUnitario" HeaderText="PrezzoUnitario"
SortExpression="PrezzoUnitario" />
<asp:BoundField DataField="Scorte" HeaderText="Scorte"
SortExpression="Scorte" />
<asp:BoundField DataField="QuantitàOrdinata" HeaderText="QuantitàOrdinata"
SortExpression="QuantitàOrdinata" />
<asp:BoundField DataField="LivelloDiRiordino" HeaderText="LivelloDiRiordino"
SortExpression="LivelloDiRiordino" />
<asp:CheckBoxField DataField="Sospeso" HeaderText="Sospeso"
SortExpression="Sospeso" />
</Columns>
</asp:GridView>


</asp:Content>

---------------------------------------------
CodeBehind VB:
---------------------------------------------
Option Strict On
Option Explicit On

Imports System.Data.OleDb


Public Class _Default
Inherits System.Web.UI.Page

Private strSQLDataSource As String = ""
Private strSQLDataSource_Filter As String = ""

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (Not String.IsNullOrEmpty(Request.QueryString("FILTRO"))) Then
SqlDataSource1.FilterExpression = Request.QueryString("FILTRO")
End If

If (IsPostBack = True) Then
'If Not IsNothing(Session("Default_Filtro")) Then
' SqlDataSource1.FilterExpression = Session("Default_Filtro").ToString
'End If

End If
End Sub


Protected Sub btnRicerca_Click(sender As Object, e As EventArgs) Handles btnRicerca.Click
Dim strSQL As String = String.Empty

txtNomeProdotto.Text = txtNomeProdotto.Text.Trim
If txtNomeProdotto.Text.Length > 0 Then
strSQL = strSQL + "NomeProdotto like '%" + txtNomeProdotto.Text + "%' AND "
End If

txtQuantita.Text = txtQuantita.Text.Trim
If txtQuantita.Text.Length > 0 Then
strSQL = strSQL + "QuantitàOrdinata = " + txtQuantita.Text + " AND "
End If

If strSQL.EndsWith(" AND ") Then
strSQL = strSQL.Substring(0, (strSQL.Length - 5))
End If

strSQLDataSource = SqlDataSource1.SelectCommand
strSQLDataSource_Filter = strSQL

SqlDataSource1.FilterExpression = strSQL
'Session("Default_Filtro") = strSQL

Response.Redirect("~\\Default.aspx?FILTRO=" + strSQL)
End Sub

Protected Sub btnReset_Click(sender As Object, e As EventArgs) Handles btnReset.Click
txtNomeProdotto.Text = ""
txtQuantita.Text = ""
SqlDataSource1.FilterExpression = String.Empty
Response.Redirect("~\\Default.aspx")
End Sub
End Class

CONCLUSIONI:
Innanzi tutto spero di essere stato di qualche aiuto per altri neofiti come me :)
Quindi da quanto visto sopra di può facilmente dedurre che il motivo per cui i filtri ed il sorting non vengono mantenuti è dovuto sostanzialmente al POSTBACK della pagina stessa. Quindi per risolvere non vi è altro da fare (a mio avviso) che salvare lo stato di alcune variabili in modo tale da consentire comportamenti corretti della pagina stessa.

Si accettano suggerimenti e migliorie.

Modificato da bozu il 06 luglio 2012 13.13 -
102 messaggi dal 26 maggio 2009
OTTIMO DAVVERO...PROPRIO QUELLO CHE CERCAVO...
IO HO USATO LA SOLUZIONE CON LE SESSION...

GRAZIE MILLE
TOMMASO
8 messaggi dal 30 gennaio 2012
tommaso2904 ha scritto:
OTTIMO DAVVERO...PROPRIO QUELLO CHE CERCAVO...
IO HO USATO LA SOLUZIONE CON LE SESSION...

GRAZIE MILLE
TOMMASO

Di nulla!! Mi scuso della mia tarda risposta. Felice di essere stato d'aiuto a qualcuno.

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.