Fórum Trabalhando com ListBox de Multiplo valor #9600

28/09/2009

0

Olá Rodrigo/Wesley, solicito ajuda de vcs novamente, bom tenho uma tela onde tenho 7 ListBox, com alguns valores relacionados a uma tabela de Membros, onde tenho NOME, IDGRUPO, IDTRATAMENTO, IDPROFISSAO, IDIGREJA, IDESCOLARIDADE, IDESTADOCIVIL, IDSEXO. Bem, preciso listar em uma GridView os Membos conforme eu seleciono nos ListBox, se eu não escolher nada, me traga SELECT * FROM MEMBROS Pois Bem, nos ListBox todos estão AutoPostBack=true e SelectionMode=Multiple Eu utilizo MSSQLServer e RAD Studio 2007, tenho essa store procedure no SQLServer, porem estou postando somente para que vcs possam me orientar o que eu possa fazer, pois não consigo utilizar mais de um parametro selecionado em um mesmo ListBox. Minha Store Procedure ALTER PROCEDURE [dbo].[spParametrizado] @IDGRUPO AS SMALLINT, @IDTRATAMENTO AS SMALLINT, @IDPROFISSAO AS SMALLINT, @IDIGREJA AS SMALLINT, @IDESCOLARIDADE AS SMALLINT, @IDESTADOCIVIL AS SMALLINT, @IDSEXO AS SMALLINT AS DECLARE @SQL AS VARCHAR(4000) SET @SQL = ' SELECT IDMEMBRO, NOME, TEL_RES, TEL_COM, CELULAR, EMAIL FROM MEMBROS WHERE 1=1 ' IF (@IDGRUPO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDGRUPO = "' + CONVERT(VARCHAR, @IDGRUPO) + '"' END IF (@IDTRATAMENTO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDTRATAMENTO = "' + CONVERT(VARCHAR, @IDTRATAMENTO) + '"' END IF (@IDPROFISSAO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDPROFISSAO = "' + CONVERT(VARCHAR, @IDPROFISSAO) + '"' END IF (@IDIGREJA IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDIGREJA = "' + CONVERT(VARCHAR, @IDIGREJA) + '"' END IF (@IDESCOLARIDADE IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDESCOLARIDADE = "' + CONVERT(VARCHAR, @IDESCOLARIDADE) + '"' END IF (@IDESTADOCIVIL IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDESTADOCIVIL = "' + CONVERT(VARCHAR, @IDESTADOCIVIL) + '"' END IF (@SEXO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND SEXO = "' + CONVERT(VARCHAR, @SEXO) + '"' END EXECUTE(@SQL) Meu botão Filtrar está assim: procedure TParametrizado.btFiltrar_Click(sender: System.Object; e: System.EventArgs); var Comand : SqlCommand; Conn : SqlConnection; SqlReader : SqlDataReader; begin Conn := SqlConnection.Create(ConfigurationManager.ConnectionStrings['Conexao'].ToString); Comand := SqlCommand.Create('spParametrizado', Conn); Comand.CommandType := CommandType.StoredProcedure; Comand.Parameters.Add('@IDGRUPO', ListBox_Grupos.SelectedValue); Comand.Parameters.Add('@IDTRATAMENTO', ListBox_Tratamentos.SelectedValue); Comand.Parameters.Add('@IDPROFISSAO', ListBox_Profissoes.SelectedValue); Comand.Parameters.Add('@IDIGREJA', ListBox_Igreja.SelectedValue); Comand.Parameters.Add('@IDESCOLARIDADE', ListBox_Escolaridade.SelectedValue); Comand.Parameters.Add('@IDESTADOCIVIL', ListBox_EstadoCivil.SelectedValue); Comand.Parameters.Add('@IDSEXO', ListBox_Sexo.SelectedValue); Conn.Open; SqlReader := Comand.ExecuteReader; if SqlReader.HasRows then begin try GridView1.DataSource := SqlReader; GridView1.DataBind; finally Conn.Close; end; end else MessageScript( Page, 'Não foram encontrado Registros conforme Opções Selecionadas !!!'); end; Obrigado mais uma vez.
Paulo Freire

Paulo Freire

Responder

Posts

28/09/2009

Paulo Freire

Me perdoem, usei o Browser Chrome, e ficou sem formação. qualquer coisa eu posto novamente.
Responder

Gostei + 0

28/09/2009

Paulo Freire

Olá Rodrigo/Wesley, solicito ajuda de vcs novamente, bom tenho uma tela onde tenho 7 ListBox, com alguns valores relacionados a uma tabela de Membros, onde tenho NOME, IDGRUPO, IDTRATAMENTO, IDPROFISSAO, IDIGREJA, IDESCOLARIDADE, IDESTADOCIVIL, IDSEXO. Bem, preciso listar em uma GridView os Membos conforme eu seleciono nos ListBox, se eu não escolher nada, me traga SELECT * FROM MEMBROS Pois Bem, nos ListBox todos estão AutoPostBack=true e SelectionMode=Multiple Eu utilizo MSSQLServer e RAD Studio 2007, tenho essa store procedure no SQLServer, porem estou postando somente para que vcs possam me orientar o que eu possa fazer, pois não consigo utilizar mais de um parametro selecionado em um mesmo ListBox.


Minha Store Procedure:

ALTER PROCEDURE [dbo].[spParametrizado]

@IDGRUPO AS SMALLINT,
@IDTRATAMENTO AS SMALLINT,
@IDPROFISSAO AS SMALLINT,
@IDIGREJA AS SMALLINT,
@IDESCOLARIDADE AS SMALLINT,
@IDESTADOCIVIL AS SMALLINT,
@IDSEXO AS SMALLINT

AS DECLARE

@SQL AS VARCHAR(4000) SET @SQL = ' SELECT IDMEMBRO, NOME, TEL_RES, TEL_COM, CELULAR, EMAIL FROM MEMBROS WHERE 1=1 '

IF (@IDGRUPO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDGRUPO = "' + CONVERT(VARCHAR, @IDGRUPO) + '"'
END

IF (@IDTRATAMENTO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDTRATAMENTO = "' + CONVERT(VARCHAR, @IDTRATAMENTO) + '"'
END

IF (@IDPROFISSAO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDPROFISSAO = "' + CONVERT(VARCHAR, @IDPROFISSAO) + '"'
END

IF (@IDIGREJA IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDIGREJA = "' + CONVERT(VARCHAR, @IDIGREJA) + '"'
END

IF (@IDESCOLARIDADE IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDESCOLARIDADE = "' + CONVERT(VARCHAR, @IDESCOLARIDADE) + '"'
END

IF (@IDESTADOCIVIL IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDESTADOCIVIL = "' + CONVERT(VARCHAR, @IDESTADOCIVIL) + '"'
END

IF (@SEXO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND SEXO = "' + CONVERT(VARCHAR, @SEXO) + '"' END

EXECUTE(@SQL)



Meu botão Filtrar está assim:

procedure TParametrizado.btFiltrar_Click(sender: System.Object; e: System.EventArgs);
var
   Comand : SqlCommand;
   Conn : SqlConnection;
   SqlReader : SqlDataReader;

begin

   Conn := SqlConnection.Create(ConfigurationManager.ConnectionStrings['Conexao'].ToString);
   Comand := SqlCommand.Create('spParametrizado', Conn);
   Comand.CommandType := CommandType.StoredProcedure;
   Comand.Parameters.Add('@IDGRUPO', ListBox_Grupos.SelectedValue);C
   Comand.Parameters.Add('@IDTRATAMENTO', ListBox_Tratamentos.SelectedValue);
   Comand.Parameters.Add('@IDPROFISSAO', ListBox_Profissoes.SelectedValue);
   Comand.Parameters.Add('@IDIGREJA', ListBox_Igreja.SelectedValue);
   Comand.Parameters.Add('@IDESCOLARIDADE', ListBox_Escolaridade.SelectedValue);
   Comand.Parameters.Add('@IDESTADOCIVIL', ListBox_EstadoCivil.SelectedValue);
   Comand.Parameters.Add('@IDSEXO', ListBox_Sexo.SelectedValue);
  
  Conn.Open;
  SqlReader := Comand.ExecuteReader;

  if SqlReader.HasRows then
  begin
   try
     GridView1.DataSource := SqlReader;
     GridView1.DataBind;
   finally
     Conn.Close;
   end;
 
  end else
   MessageScript( Page, 'Não foram encontrado Registros conforme Opções Selecionadas !!!');
end;


Obrigado mais uma vez.
Responder

Gostei + 0

28/09/2009

Rodrigo Mourão

Olá Paulo


Vuio analisar para entender completamente o problema e lhe sugerir algo .

Abs!!


Responder

Gostei + 0

29/09/2009

Paulo Freire

Beleza, obrigado.
Responder

Gostei + 0

29/09/2009

Rodrigo Mourão

Paulo vamos lá. Não sei se entendi muito bem, mas vc esta querendo selecionar ou não um item nos lists box e então fazer um filtro para exibir membros que se enquadrem nos parametros. Exemplo seleciono a profissão analista e ele me tras todos os membros analistas, correto ??

Agora me diz um coisa, vc fala em selectmode como Multiple então sua intenção seria poder selecionar duas profissões por exemplo? Ou sua intenção e permitir que o usuario selecione um profissao, um tratamento ou uma escolaridade e fazer um filtro em cima destes parametros de modo que fique dinâmico.

Eu fiquei na dúvida eu acredito q segunda opção mais viável e mais pratica. Podemos montar o Select Dinamicamente. Pode me confirmar a intenção !!

Abs!!

Responder

Gostei + 0

30/09/2009

Paulo Freire

exatamente a 2ª opção, o usuário selecionara ANALISTA E ADVOGADO E CONTADORES num ListBox e assim montar o filtro para ser monstrado no GridView.

Valeu
Responder

Gostei + 0

30/09/2009

Rodrigo Mourão

Blz Paulo,

Posso te pedir um favor, teria como mandar a sua aplicação, pois ja esta toda montada e inclisive pq usar procedure assim ganhamos tempo e outro presico ver como vc esta carregando o ListBox.

Se nao puder nao tem problema eu montar uma aqui mas pode demorar um pouco.


abs!1


Responder

Gostei + 0

01/10/2009

Paulo Freire

Sim, claro, vc precisa dos banco também correto, com as stores procedures?
Responder

Gostei + 0

01/10/2009

Paulo Freire

Como eu envio os arquivos?
Responder

Gostei + 0

01/10/2009

Rodrigo Mourão

Pelo Disco Virtual !!!

https://www.devmedia.com.br/imagens/videos/4/Video%20disco%20virtual.htm


Abs!!!

P.S.: Não esqueca de passar o link !!!
Responder

Gostei + 0

02/10/2009

Paulo Freire

Fala Rodrigo, vamos lá primeiro é o projeto em si

http://video.devmedia.com.br/discovirtual/81635/suportes/ShalomWeb.rar

São as paginas Parametrizado.aspx e EnviarEmails.aspx que utilizo os ListBox

O scrito do banco é esse

http://video.devmedia.com.br/discovirtual/81635/suportes/ScriptDataBase_ShalomWeb.rar


Qualquer dúvida estamos aqui, obrigadão


Paulo
Responder

Gostei + 0

03/10/2009

Rodrigo Mourão

Olá Paulo,

Ja beixei e montei  o projeto com o banco aqui. Peço que aguarde mais um pouco estou realizando testes para tentar resolver seu problema.

Abs!!

Responder

Gostei + 0

03/10/2009

Rodrigo Mourão

Olá Paulo, eu nunca me dei bem com SQL Server, não consegui conectar no banco de dados, por isso não testei a aplicação, mas a principio vai funcionar.

Vamos la primeiro temos quel alterar a procedure [spParametrizado] atualmente os parametros são smallint mude para varchar:

  @IDGRUPO         AS varchar,
  @IDTRATAMENTO    AS varchar,
  @IDPROFISSAO     AS varchar,
  @IDIGREJA        AS varchar,
  @IDESCOLARIDADE  AS varchar,
  @IDESTADOCIVIL   AS varchar,
  @SEXO            AS varchar

Eu vou mostar a mudanca no grupo, mas basta fazer a mesma coisa para os outros parametros. Veja como fica a alteracao para o parametro Grupo:

IF (@IDGRUPO IS NOT NULL)
BEGIN
    SET @SQL = @SQL + ' AND IDGRUPO in ("' + @IDGRUPO + '")'
END


Para entender, sai o =  e entra o IN ()  isso pq agora poderemos pegar não um mais varios grupos. Faca o mesmo para os outros parametros.

Agora vamos ao Delphi. No clique do botao filtrar a pagina parametrizacao antes do codigo que ja exista vc terar uqe pegar os codigos dos grupos selecionados e passar para o select. Eu criei uma variavel Grupo e fiz um loop. Veja:

for i := 0 to ListBox_Grupos.Items.Count-1 do
  begin
    if ListBox_Grupos.Items[I].Selected then
      Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
  end;
  Grupo := Grupo.Remove(Grupo.Length,1);

Como estou colocando ID,ID,ID, no final eu delete a ultima virgula. Depois eu passo o grupo para o procedure.

Conn   := SqlConnection.Create(ConfigurationManager.ConnectionStrings['ConexaoShalom'].ToString);
  Comand := SqlCommand.Create('spParametrizado', Conn);
  Comand.CommandType := CommandType.StoredProcedure;
  Comand.Parameters.Add('@IDGRUPO', Grupo);

Faça o loop com os outros compoenntes.

Como falei nao testei a aplicacao pois nao consigo conectar na base, mas a procedure compilou legal e a aplicacao tambem.

Qualquer coisa e so falar  !!!

Abs!!1






Responder

Gostei + 0

05/10/2009

Paulo Freire

Olá Rodrigão, como vc disse belezinha, compilou a procedure e a aplicação, porem ao chama-la em localhost/shalomweb, me aparece essa exceção conforme a figura enviada. Meu botão filtrar está dessa forma.

procedure TParametrizado.btFiltrar_Click(sender: System.Object; e: System.EventArgs);
var
  Comand      : SqlCommand;
  Conn        : SqlConnection;
  SqlReader   : SqlDataReader;
  Grupo, Tratamento, Profissao, Igreja, Escolaridade, EstadoCivil,
  Sexo        : string;
  i           : integer;


begin


  For i := 0 to ListBox_Grupos.Items.Count-1 do
  begin
    if ListBox_Grupos.Items[I].Selected then
      Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
  end;
  Grupo := Grupo.Remove(Grupo.Length,1);

  For i := 0 to ListBox_Tratamentos.Items.Count-1 do
  begin
    if ListBox_Tratamentos.Items[I].Selected then
      Tratamento := Tratamento + ListBox_Tratamentos.Items[I].Value+',';
  end;
  Tratamento := Tratamento.Remove(Tratamento.Length,1);

  For i := 0 to ListBox_Profissoes.Items.Count-1 do
  begin
    if ListBox_Profissoes.Items[I].Selected then
      Profissao := Profissao + ListBox_Profissoes.Items[I].Value+',';
  end;
  Profissao := Profissao.Remove(Profissao.Length,1);

  For i := 0 to ListBox_Igreja.Items.Count-1 do
  begin
    if ListBox_Igreja.Items[I].Selected then
      Igreja := Igreja + ListBox_Igreja.Items[I].Value+',';
  end;
  Igreja := Igreja.Remove(Igreja.Length,1);

  For i := 0 to ListBox_Escolaridade.Items.Count-1 do
  begin
    if ListBox_Escolaridade.Items[I].Selected then
      Escolaridade := Escolaridade + ListBox_Escolaridade.Items[I].Value+',';
  end;
  Escolaridade := Escolaridade.Remove(Escolaridade.Length,1);

  For i := 0 to ListBox_EstadoCivil.Items.Count-1 do
  begin
    if ListBox_EstadoCivil.Items[I].Selected then
      EstadoCivil := EstadoCivil + ListBox_EstadoCivil.Items[I].Value+',';
  end;
  EstadoCivil := EstadoCivil.Remove(EstadoCivil.Length,1);

  For i := 0 to ListBox_Sexo.Items.Count-1 do
  begin
    if ListBox_Sexo.Items[I].Selected then
      Sexo := Sexo + ListBox_Sexo.Items[I].Value+',';
  end;
  Sexo := Sexo.Remove(Sexo.Length,1);


  Conn   := SqlConnection.Create(ConfigurationManager.ConnectionStrings['ConexaoShalom'].ToString);
  Comand := SqlCommand.Create('spParametrizado', Conn);
  Comand.CommandType := CommandType.StoredProcedure;
  Comand.Parameters.Add('@IDGRUPO', Grupo);
  Comand.Parameters.Add('@IDTRATAMENTO', Tratamento);
  Comand.Parameters.Add('@IDPROFISSAO', Profissao);
  Comand.Parameters.Add('@IDIGREJA', Igreja);
  Comand.Parameters.Add('@IDESCOLARIDADE', Escolaridade);
  Comand.Parameters.Add('@IDESTADOCIVIL', EstadoCivil);
  Comand.Parameters.Add('@SEXO', Sexo);

  Conn.Open;
  SqlReader := Comand.ExecuteReader;

  if SqlReader.HasRows then
  begin

    try
      GridViewParametrizado.DataSource := SqlReader;
      GridViewParametrizado.DataBind;
    finally
      Conn.Close;
    end;

  end else
    MessageScript( Page, 'Não foram encontrados Registros conforme Selecionados !!!');


end;
Responder

Gostei + 0

05/10/2009

Paulo Freire

Opa acho que a imagem não foi, segue novamente.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar