Usuário com melhor resposta
Problema com retorno de varias linhas

Pergunta
-
Seguinte, eu tenho uma query que retorna uma string, essa string é mandada para um ListBox. Como normalmente a string é muito grande eu do um substring e adiciono "..." no final dela, pois ela nao caberia no ListBox... Até ai tudo certo, o problema é que asvezes a string tem "Várias Linhas" e quando eu retorno o ListBox fica assim:
STRING MUITO GRANDE QUE NAO CABE TU...
SEGUNDA LINHA DA STRING MUITO GRAND...
Aí está meu problema, eu queria que caso ouvesse 2 linhas, apenas a primeira linha fosse mostrada... pensei e procurei mas nao encontrei uma forma de resolver isso ...
Eis meu seguinte metodo de retorno
while (dtrs.Read()) { if (dtrs.GetString(0).Length > 30) lbox.Items.Add(dtrs.GetString(0).Substring(0, 30) + "..."); else lbox.Items.Add(dtrs.GetString(0)); }
Ao infinito e além!
Respostas
-
Fabio,
Já pensou em primeiro jogar o resultado da leitura em uma List<string> e depois fazer a checagem se só foi lida uma linha ou várias?
André Alves de Lima
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta Marcus Paulo Couto terça-feira, 16 de novembro de 2010 15:51
- Marcado como Resposta Fabio R. Luz quarta-feira, 17 de novembro de 2010 14:42
-
Olá Fábio concordo com o André, desta forma que ele propos ficaria algo do tipo em C#:
List<string> lista = new List<string>(); while (dtrs.Read()) { if (dtrs.GetString(0).Length > 30) lista.Add(dtrs.GetString(0).Substring(0, 30) + "..."); else lista.Add(dtrs.GetString(0)); } lbox.Items.Add(lista[0]);
Uma outra abordagem que seria possivel seria alterar a QUERY passada ao comando usado para a geração do DataReader:
Exemplo atualmente se está assim:SELECT CAMPO FROM TABELA
Ficaria assim:
SELECT TOP 1 CAMPO FROM TABELA
A vantagem de se fazer esta forma é que poderia ficar ligeiramente mais rápido, pois traz somente um registro em vez de trazer vários registros desnecessariamente. Fazendo desta forma o código em C# não precisaria ser alterado.
Atenciosamente
Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 16 de novembro de 2010 16:02
- Marcado como Resposta Fabio R. Luz quarta-feira, 17 de novembro de 2010 14:42
-
Então eu consegui resolver.. na verdade a solução era MUITO SIMPLES...
Quando eu retorno a query pra uma string, a parte que pula linha tem um "\r\n". Entao foi só tratar...
string itemCorrente = dtrs.GetString(1); if (itemCorrente.IndexOf("\n") > 0) { int posLineBreak = itemCorrente.IndexOf("\r"); string questao = itemCorrente.Substring(0, posLineBreak); if (questao.Length > 30) lbox.Items.Add(dtrs.GetInt32(0).ToString() + ". " + questao.Substring(0, 30) + "..."); else lbox.Items.Add(dtrs.GetInt32(0).ToString() + ". " + questao); }
Eu pensei em fazer isso desde o início acontece que, não sei de que forma eu tive a ILUSTRE IDÉIA de que os Controles WPF não aceitam \n para "pular de linha", Daí tinha descartado essa opção... Pórem ao debugar, vi que ao retornar a query aparece "\n" na string. sendo assim apenas "Substringuei" a string apartir do ponto onde o "\r\n" se encontrava...
Ao infinito e além!- Marcado como Resposta Fabio R. Luz quarta-feira, 17 de novembro de 2010 14:41
Todas as Respostas
-
Fabio,
Já pensou em primeiro jogar o resultado da leitura em uma List<string> e depois fazer a checagem se só foi lida uma linha ou várias?
André Alves de Lima
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Sugerido como Resposta Marcus Paulo Couto terça-feira, 16 de novembro de 2010 15:51
- Marcado como Resposta Fabio R. Luz quarta-feira, 17 de novembro de 2010 14:42
-
Olá Fábio concordo com o André, desta forma que ele propos ficaria algo do tipo em C#:
List<string> lista = new List<string>(); while (dtrs.Read()) { if (dtrs.GetString(0).Length > 30) lista.Add(dtrs.GetString(0).Substring(0, 30) + "..."); else lista.Add(dtrs.GetString(0)); } lbox.Items.Add(lista[0]);
Uma outra abordagem que seria possivel seria alterar a QUERY passada ao comando usado para a geração do DataReader:
Exemplo atualmente se está assim:SELECT CAMPO FROM TABELA
Ficaria assim:
SELECT TOP 1 CAMPO FROM TABELA
A vantagem de se fazer esta forma é que poderia ficar ligeiramente mais rápido, pois traz somente um registro em vez de trazer vários registros desnecessariamente. Fazendo desta forma o código em C# não precisaria ser alterado.
Atenciosamente
Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 16 de novembro de 2010 16:02
- Marcado como Resposta Fabio R. Luz quarta-feira, 17 de novembro de 2010 14:42
-
Então eu consegui resolver.. na verdade a solução era MUITO SIMPLES...
Quando eu retorno a query pra uma string, a parte que pula linha tem um "\r\n". Entao foi só tratar...
string itemCorrente = dtrs.GetString(1); if (itemCorrente.IndexOf("\n") > 0) { int posLineBreak = itemCorrente.IndexOf("\r"); string questao = itemCorrente.Substring(0, posLineBreak); if (questao.Length > 30) lbox.Items.Add(dtrs.GetInt32(0).ToString() + ". " + questao.Substring(0, 30) + "..."); else lbox.Items.Add(dtrs.GetInt32(0).ToString() + ". " + questao); }
Eu pensei em fazer isso desde o início acontece que, não sei de que forma eu tive a ILUSTRE IDÉIA de que os Controles WPF não aceitam \n para "pular de linha", Daí tinha descartado essa opção... Pórem ao debugar, vi que ao retornar a query aparece "\n" na string. sendo assim apenas "Substringuei" a string apartir do ponto onde o "\r\n" se encontrava...
Ao infinito e além!- Marcado como Resposta Fabio R. Luz quarta-feira, 17 de novembro de 2010 14:41