In una pagina .aspx ho predisposto una div runat server con visible=false.
All'interno di detta div ho inserito un controllo GridView e relativo SqlDataSource.
All'evento clic di un ImageButton imposto a visible=true la div e richiamo il metodo DataBind del gridView.
All'evento Selecting del SqlDataSource (origine dati della griglia) assegno i valori ai parametri delle SP impostata alla proprietà SelectQuery.
Mandando in esecuzione il tutto accade che viene eseguito l'evento di selecting ma la sp non viene eseguita sul SQL Server (ho verificato con il profiler) infatti l'evento di selected del SqlDataSource non si genera.
Vi riporto di seguito il codice della pagina aspx e il testo della SP.
Grazie.
PAGINA ASPX
<div id="finderContatti">
<fieldset id="fldCerca" class="label_11">
<legend class="legend_open" id="btnCerca">Cerca</legend>
<div id="contenutoCerca">
<fieldset id="fldTelefonate" class="left" style="padding:3px;height:55px;">
<legend>Telefonate</legend>
<p style="margin:0px;padding:3px;" class="left" id="colSxTel">
<asp:Label ID="Label1" runat="server" Text="Dal:"></asp:Label><br />
<asp:TextBox ID="TextBox_Dal" runat="server" CssClass="textbox" MaxLength="10" Width="80px"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Data inizio ricerca non valida" ControlToValidate="TextBox_Dal" CssClass="errore" ValidationExpression="(((0[1-9]|[12][0-9]|3[01])([-./])(0[13578]|10|12)([-./])(\d{4}))|(([0][1-9]|[12][0-9]|30)([-./])(0[469]|11)([-./])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([-./])(02)([-./])(\d{4}))|((29)(\.|-|\/)(02)([-./])([02468][048]00))|((29)([-./])(02)([-./])([13579][26]00))|((29)([-./])(02)([-./])([0-9][0-9][0][48]))|((29)([-./])(02)([-./])([0-9][0-9][2468][048]))|((29)([-./])(02)([-./])([0-9][0-9][13579][26])))" ValidationGroup="vg_cerca" Display="Dynamic">!</asp:RegularExpressionValidator>
</p>
<p style="margin:0px;padding:3px;" class="left" id="colDxTel">
<asp:Label ID="Label2" runat="server" Text="Al:"></asp:Label><br />
<asp:TextBox ID="TextBox_Al" runat="server" CssClass="textbox" MaxLength="10" Width="80px"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ErrorMessage="Data fine ricerca non valida" ControlToValidate="TextBox_Al" CssClass="errore" ValidationExpression="(((0[1-9]|[12][0-9]|3[01])([-./])(0[13578]|10|12)([-./])(\d{4}))|(([0][1-9]|[12][0-9]|30)([-./])(0[469]|11)([-./])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([-./])(02)([-./])(\d{4}))|((29)(\.|-|\/)(02)([-./])([02468][048]00))|((29)([-./])(02)([-./])([13579][26]00))|((29)([-./])(02)([-./])([0-9][0-9][0][48]))|((29)([-./])(02)([-./])([0-9][0-9][2468][048]))|((29)([-./])(02)([-./])([0-9][0-9][13579][26])))" ValidationGroup="vg_cerca" Display="Dynamic">!</asp:RegularExpressionValidator>
</p>
</fieldset>
<fieldset id="fldEsiti" class="left" style="padding:3px;margin-left:5px;height:55px;">
<legend>Esiti</legend>
<p style="margin:0px;padding:3px;" class="left" id="colSxEsi">
<asp:Label ID="Label3" runat="server" Text="Motivi"></asp:Label><br />
<asp:DropDownList ID="DropDownList_motivi" runat="server" CssClass="textbox" DataSourceID="SqlDataSource_motivi" DataTextField="motivoStr" DataValueField="idMotivo" AppendDataBoundItems="True" AutoPostBack="True" OnSelectedIndexChanged="DropDownList_motivi_SelectedIndexChanged">
<asp:ListItem Value="..."></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource_motivi" runat="server" ConnectionString="<%$ ConnectionStrings:LocalSqlServer %>" ProviderName="System.Data.SqlClient" SelectCommand="SELECT idMotivo, motivoStr FROM dbo.MKT_list_motivi ORDER BY motivoStr"></asp:SqlDataSource>
</p>
<p style="margin:0px;padding:3px;" class="left" id="colDxEsi" onmouseover="tooltip.show('seleziona max. 3 esiti');" onmouseout="tooltip.hide();">
<asp:Label ID="Label4" runat="server" Text="Esiti"></asp:Label><br />
<asp:ListBox ID="ListBox_esiti" runat="server" AppendDataBoundItems="True" CssClass="textbox"
DataSourceID="SqlDataSource_esiti" DataTextField="esitoStr" DataValueField="idEsito"
Rows="1" SelectionMode="Multiple">
<asp:ListItem Value="...">...</asp:ListItem>
</asp:ListBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator_motivi" runat="server" ControlToValidate="ListBox_esiti"
CssClass="errore" Display="Dynamic" Enabled="False" ErrorMessage="Seleziona uno o più esiti"
ValidationGroup="vg_cerca" InitialValue="...">!</asp:RequiredFieldValidator>
<asp:SqlDataSource ID="SqlDataSource_esiti" runat="server" ConnectionString="<%$ ConnectionStrings:LocalSqlServer %>" ProviderName="System.Data.SqlClient" SelectCommand="MKT_get_ListEsiti_for_motivo" SelectCommandType="StoredProcedure" >
<SelectParameters>
<asp:Parameter Name="idMotivo" Type="Int16" />
</SelectParameters>
</asp:SqlDataSource>
</p>
</fieldset>
<p style="margin-top:42px;margin-left:5px;padding:3px;" class="left">
<asp:ImageButton ID="ImageButton_cerca" runat="server" ImageUrl="~/images/search_16x16.png" ToolTip="Cerca" ValidationGroup="vg_cerca" OnClick="ImageButton_cerca_Click" />
</p>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" CssClass="errore" DisplayMode="List" ValidationGroup="vg_cerca" /><br />
<asp:CustomValidator ID="CustomValidator_esiti" runat="server" ErrorMessage="Definire un criterio di ricerca" SetFocusOnError="True" ValidationGroup="vg_cerca" OnServerValidate="CustomValidator_esiti_ServerValidate" Display="Dynamic" ForeColor="White"></asp:CustomValidator>
</div>
</fieldset>
</div>
<div id="resultRicerca" runat="server" visible="false">
<fieldset class="label_11" id="fldResult_ricerca">
<legend>Risultati ricerca</legend>
<asp:GridView ID="GridView_resultRicerca" runat="server" DataSourceID="SqlDataSource_resultRicerca" AutoGenerateColumns="False" DataKeyNames="ID_Persona,idAssegnazione">
<Columns>
<asp:BoundField DataField="ID_Persona" HeaderText="ID_Persona" InsertVisible="False"
ReadOnly="True" SortExpression="ID_Persona" Visible="False" />
<asp:BoundField DataField="Cognome_Persona" HeaderText="Cognome_Persona" SortExpression="Cognome_Persona" />
<asp:BoundField DataField="Nome_Persona" HeaderText="Nome_Persona" SortExpression="Nome_Persona" />
<asp:BoundField DataField="DataNascita_Persona" HeaderText="DataNascita_Persona"
SortExpression="DataNascita_Persona" />
<asp:BoundField DataField="Comune_Persona" HeaderText="Comune_Persona" SortExpression="Comune_Persona" />
<asp:BoundField DataField="c_provincia" HeaderText="c_provincia" SortExpression="c_provincia" />
<asp:BoundField DataField="idAssegnazione" HeaderText="idAssegnazione" InsertVisible="False"
ReadOnly="True" SortExpression="idAssegnazione" Visible="False" />
<asp:BoundField DataField="dataLastTelefonata" HeaderText="dataLastTelefonata" ReadOnly="True"
SortExpression="dataLastTelefonata" />
<asp:BoundField DataField="esitoStr" HeaderText="esitoStr" SortExpression="esitoStr" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource_resultRicerca" ConnectionString="<%$ ConnectionStrings:LocalSqlServer %>" runat="server" ProviderName="System.Data.SqlClient" SelectCommand="MKT_get_ricercaContatti_inAssegnazione" SelectCommandType="StoredProcedure" OnSelecting="SqlDataSource_resultRicerca_Selecting" OnSelected="SqlDataSource_resultRicerca_Selected">
<SelectParameters>
<asp:Parameter Name="idRicerca" Type="Int32" />
<asp:Parameter Name="userIdOperatore" Type="Object" />
<asp:Parameter DbType="Date" DefaultValue="" Name="dal" />
<asp:Parameter DbType="Date" DefaultValue="" Name="al" />
<asp:Parameter DefaultValue="" Name="idMotivo" Type="Int16" />
<asp:Parameter Name="esiti" Type="String" />
<asp:Parameter Direction="ReturnValue" Name="RETURN_VALUE" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
</fieldset>
</div>
STORED PROCEDURE
ALTER PROCEDURE [dbo].[MKT_get_ricercaContatti_inAssegnazione]
@idRicerca int,
@userIdOperatore uniqueidentifier,
@dal smalldatetime = '19000101',
@al smalldatetime = '19000101',
@idMotivo smallint = 0,
@esiti nvarchar (12) = ''
AS
BEGIN
declare @inizio int
declare @lastFound int
declare @contatore int
declare @txtSql nvarchar(4000)
SET @inizio = 0
set @contatore = 0
SET @txtSql = N'SELECT PERSONE.ID_Persona, PERSONE.Cognome_Persona, PERSONE.Nome_Persona, PERSONE.DataNascita_Persona, PERSONE.Comune_Persona,
COMUNI.c_provincia, MKT_ASSEGNAZIONI.idAssegnazione, MAX(MKT_TELEFONATE.dataTelefonata) AS dataLastTelefonata,
MKT_ESITO_TELEFONATA.esitoStr
FROM MKT_ASSEGNAZIONI INNER JOIN
PERSONE ON MKT_ASSEGNAZIONI.idContatto = PERSONE.ID_Persona INNER JOIN
COMUNI ON PERSONE.Comune_Persona = COMUNI.c_nome INNER JOIN
MKT_TELEFONATE ON MKT_ASSEGNAZIONI.idAssegnazione = MKT_TELEFONATE.idAssegnazione INNER JOIN
MKT_DETT_TELEFONATE ON MKT_TELEFONATE.idTelefonata = MKT_DETT_TELEFONATE.idTelefonata INNER JOIN
MKT_MOTIVI_ESITI ON MKT_DETT_TELEFONATE.motivo_esito = MKT_MOTIVI_ESITI.idMotivoEsito INNER JOIN
MKT_ESITO_TELEFONATA ON MKT_MOTIVI_ESITI.idEsito = MKT_ESITO_TELEFONATA.idEsito'
--aggiungo i criteri relativi all'identificativo dell'operatore e della ricerca
SET @txtSql = @txtSql + ' WHERE (MKT_ASSEGNAZIONI.idRicerca =@idRicerca) AND (MKT_ASSEGNAZIONI.userIdOperatore =@userIdOperatore) AND (MKT_ASSEGNAZIONI.locked = 0)'
--aggiungo i criteri relativi all'esito della telefonata
IF (@idMotivo <> 0 AND @esiti <> '')
BEGIN
SET @txtSql = @txtSql + ' AND (MKT_MOTIVI_ESITI.idMotivo =@idMotivo)'
WHILE (@inizio <= LEN(@esiti))
BEGIN
SET @lastFound = CHARINDEX (N';',@esiti,@inizio)
IF (@lastFound=0 OR @lastFound = NULL)
SET @lastFound = LEN(@esiti)+1
SET @contatore = @contatore+1
IF (@contatore = 1)
BEGIN
SET @txtSql = @txtSql + ' AND ((MKT_MOTIVI_ESITI.idEsito =' + RTRIM(LTRIM(SUBSTRING(@esiti,@inizio,@lastFound-@inizio))) + ')'
END
ELSE
BEGIN
SET @txtSql = @txtSql + ' OR (MKT_MOTIVI_ESITI.idEsito =' + RTRIM(LTRIM(SUBSTRING(@esiti,@inizio,@lastFound-@inizio))) + ')'
END
SET @inizio = @lastFound + 1
END
SET @txtSql = @txtSql + ')'
END
SET @txtSql = @txtSql + ' GROUP BY PERSONE.ID_Persona, PERSONE.Cognome_Persona, PERSONE.Nome_Persona, PERSONE.DataNascita_Persona, PERSONE.Comune_Persona,
COMUNI.c_provincia, MKT_ASSEGNAZIONI.idAssegnazione, MKT_ESITO_TELEFONATA.esitoStr'
--aggiungo i criteri relativi alla data della telefonata
IF (@dal <> '19000101' AND @al <> '19000101')
BEGIN
SET @txtSql = @txtSql + ' HAVING (MAX(MKT_TELEFONATE.dataTelefonata) >= @dal) AND (MAX(MKT_TELEFONATE.dataTelefonata) <= @al )'
END
SET @txtSql = @txtSql + ' ORDER BY PERSONE.Cognome_Persona'
--PRINT @txtSql
exec sp_executesql @txtSql,
N'@idRicerca int, @userIdOperatore uniqueidentifier, @idMotivo smallint, @dal smalldatetime, @al smalldatetime',
@idRicerca, @userIdOperatore, @idMotivo, @dal, @al
END