Posted at Tuesday, July 03, 2007 1:46 PM
Andei às voltas por causa da actualização de uma GridView quando passava como parametro uma String vazia ( '' ) ... fazia o bind, tanto do sqldatasource como da gridview e nunca me retornava nada.
A página continha 3 dropdownlists, 1 textbox, 1 botão (search button), 1 gridview e 1 sqldatasource.
Os parametros de selecção (SelectParameters) estavam definidos para terem os valores das dropdownlists e da textbox de maneira a filtrar os resultados que seriam devolvidos por um stored procedure. Como queria que, caso não passasse nenhum valor, me fossem retornados todos os resultados ignorando a clausula WHERE ... decidi fazer algo deste tipo
(o exemplo foi adaptado para aqui para não incluir o código todo)
CREATE PROCEDURE ListarEquipamentoPorNumSerie(@sn varchar(25))
AS
declare @sql_aux as varchar(255)
if ISNULL(@sn,'') <> ''
set @sql_aux = ' AND e.sn = ''' + @sn + ''''
declare @sql as nvarchar(MAX)
SET @sql = N'select e.id_equipamento,e.marca,e.modelo,e.sn,l.Nome_Loja
from equipamentos e
inner join permissoes.dbo.lojas l on (l.cod_loja = e.id_local)
where 1=1' + ISNULL(@sql_aux,'')
print @sql
execute sp_executesql @sql
GO
Ao correr a página, nada era devolvido no load ... assim como quando definia novos parametros e actualizava o datasource e a grid.
O problema estava no parametro SN, pois estava a ser convertido para Null ( ConvertEmptyStringToNull ) ... fazendo com que a operação fosse sempre cancelada devido à propriedade CancelSelectOnNullParameter estar a True no SqlDataSource.
Solução ... CancelSelectOnNullParameter = False