Array
(
)

MultiSelect Without CTRL/SHIFT

Fernanda Oliveira
   - 05 nov 2012

Pessoa,
Venho mais uma vez pedir uma ajudinha.
Trabalho com aplicações p Touch Screen, e estou fazendo uma aplicação em Windows Forms-C#.
Gostaria de saber se tem como fazer, via código, q qdo eu der um click no grid(lista de ítens) este abilite a função do CTRL p poder selecionar mais de um.
Hoje eu deixei abilitado o Multiselect e c teclado aperto o CTRL e acontece o q quero, mas p aplicação Touch não tem teclado.
Aguém pode me ajudar??
Obrigada!

Robson Robsonalves.net
   - 05 nov 2012

eu precisei uma vez fazer um sistema (diferente de site) que fosse executado tanto no desktop quanto no tablet.

No browser desktop eu tinha eventos drag and drops entre outros.

No tablet o drag and drop (Arraste) não funciona por questão da tela ser touch e o browser ter particularidades então fiz um jquery que ao indentificar o dispositvo ele transformava o drag and drop em clicável com caixas de seleção na lista.

Assim o usuário do table clica nas opções e clica em outro botão para firmar a seleção, podendo ser várias ou não...

Apenas idéia,

Trabalhei com ASP.Net e Jquery!

Fernanda Oliveira
   - 05 nov 2012

Pois é, sendo q para Touch não funciona o Checkbox.....

Usei as seguintes funções

private void gridContaOrigem_CellClick(object sender, GridViewCellEventArgs e)
{
e.Row.IsSelected = (!e.Row.IsSelected);
}

private void gridContaOrigem_SelectionChanging(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
}

sendo q qdo vou usar a seta--> p baixo q serve p passar de uma linha do grid para outra linha, este não funciona. Segue o código da seta

#region Métodos

private bool PermitePosicionarItemProximo(RadGridView grid, int linha)
{
return (linha + 1 < grid.RowCount);
}

private int ObterPosicaoLancamentoSelecionado(RadGridView grid)
{
var ret = -1;

if (grid.SelectedRows.Count > 0)
{
ret = grid.Rows.IndexOf(grid.SelectedRows[0]);
}

return ret;
}

#endregion

#region Tela

private void btnItemAnteriorOrigem_Click(object sender, EventArgs e)
{
var linha = this.ObterPosicaoLancamentoSelecionado(gridContaOrigem);

if (this.PermitePosicionarItemAnterior(linha))
{
gridContaOrigem.Rows[linha - 1].IsCurrent = true;
}
}

private void btnItemProximoOrigem_Click(object sender, EventArgs e)
{
var linha = this.ObterPosicaoLancamentoSelecionado(gridContaOrigem);

if (this.PermitePosicionarItemProximo(gridContaOrigem, linha))
{
gridContaOrigem.Rows.First().IsSelected = true;
gridContaOrigem.Rows[linha + 1].IsCurrent = true;
}
}

#endregion

Alguma idéia?

Robson Robsonalves.net
   - 05 nov 2012

Me surpreendeu saber q o chekbox não funciona...
não será algum erro de implementação do campo ??

Fernanda Oliveira
   - 05 nov 2012

não é q não funcione....funcionar funciona, mas não é viável usar checkbox p touch.....não acha?

meu chefe q diz isso.....kkkk

Imagine uma pessoa c dedo clicando no checkbox.......usuário é fogo! kkkk

Pode me ajudar o pq não funciona mais o método da seta??

Obrigada

Robson Robsonalves.net
   - 05 nov 2012

Bem o jeito é seguir sua linha de raciocinio e a cada linha clicada, você deva persistir isso, criar uma lógica de guardar todas as opções clicadas e seguir o fluxo desejado não vai ter milagres aqui.

Robson Robsonalves.net
   - 05 nov 2012


Citação:
não é q não funcione....funcionar funciona, mas não é viável usar checkbox p touch.....não acha?

meu chefe q diz isso.....kkkk

Imagine uma pessoa c dedo clicando no checkbox.......usuário é fogo! kkkk

Pode me ajudar o pq não funciona mais o método da seta??

Obrigada


Primeiro, você tem que usar o que o recurso de permitir.. se para selecionar multiplas opções o jeito é apelar para check então é check!

agora sobre o erro, o que aparece para você, em qual método. analisando assim fica díficil ter idéia.

Fernanda Oliveira
   - 05 nov 2012

Não aparece o erro, mas qdo clico na seta este desce uma linha.....até aí tudo bem, mas pára e não continua....

Mas o engraçado é q o scroll do mouse funciona dentro do grid.....estranho, né?

Ah...tbm não é viável ter scrol visivel pq é um sistema de PDV touch.

Obrigada!

Robson Robsonalves.net
   - 05 nov 2012

O scroll utiliza as mesmas funções da seta?

Pq só pode esta ocorrendo erro de index do gridview, tipo você está tentando acessar uma linha que não exista

Joel Rodrigues
   - 05 nov 2012

Olá, Fernanda.
Não posso falar com certeza (ainda), pois nunca precisei fazer algo semelhante, mas você já pesquisou se não é mais fácil fazer isso usando WPF?

Fernanda Oliveira
   - 06 nov 2012

Não o Scroll não está usando a mesma função, no grid mesmo nas propriedades coloquei como true a função de scroll, mas deixei invisível.
Na seta q tem a função de subir e a outra de descer.....mas não funciona qdo coloco os eventos, abaixo

private void gridContaOrigem_CellClick(object sender, GridViewCellEventArgs e)
{
e.Row.IsSelected = (!e.Row.IsSelected);
}

private void gridContaOrigem_SelectionChanging(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
}

Para poder clicar em mais de uma opção sem usar o CTRL apertado, desse jeito funciona, mas desabilita as outras duas funções q é usado nas setas

Entendeu?

Vou colocar o código das setas......

#region Métodos para Setas

private bool PermitePosicionarItemAnterior(int linha)
{
return (linha > 0);
}

private bool PermitePosicionarItemProximo(RadGridView grid, int linha)
{
return (linha + 1 < grid.RowCount);
}

private int ObterPosicaoLancamentoSelecionado(RadGridView grid)
{
var ret = -1;

if (grid.SelectedRows.Count > 0)
{
ret = grid.Rows.IndexOf(grid.SelectedRows[0]);
}

return ret;
}

#endregion

#region Funções das setas na tela

private void btnItemAnteriorOrigem_Click(object sender, EventArgs e)
{
var linha = this.ObterPosicaoLancamentoSelecionado(gridContaOrigem);

if (this.PermitePosicionarItemAnterior(linha))
{
gridContaOrigem.Rows[linha - 1].IsCurrent = true;
}
}

private void btnItemProximoOrigem_Click(object sender, EventArgs e)
{
var linha = this.ObterPosicaoLancamentoSelecionado(gridContaOrigem);

if (this.PermitePosicionarItemProximo(gridContaOrigem, linha))
{
gridContaOrigem.Rows.First().IsSelected = true;
gridContaOrigem.Rows[linha + 1].IsCurrent = true;
}
}

#endregion

Robson Robsonalves.net
   - 06 nov 2012

Eu reforço que o problema pode ser o Index do gridview...

Não tenho como simular seu ambiente =(

Você não captura nenhum erro em Debug ?

Fernanda Oliveira
   - 06 nov 2012

Vou colocar o q aparece no Output

NHibernate.SQL: 2012/11/06 08:54:32:347 [DEBUG] - SELECT this_.ObjectID as ObjectID14_0_, this_.Creation as Creation14_0_, this_.LastUpdate as LastUpdate14_0_, this_.IT_STR_CODIGO as IT5_14_0_, this_.IT_STR_CODIGOBARRAS as IT6_14_0_, this_.IT_STR_DESCRICAO as IT7_14_0_, this_.IT_STR_UNIDADEMEDIDA as IT8_14_0_, this_.IT_BLOB_FOTO as IT9_14_0_, this_.IT_NUM_FRACIONAVEL as IT10_14_0_, this_.IT_NUM_ATIVO as IT11_14_0_, this_.IT_VLR_QUANTESTOQUE as IT12_14_0_, this_.IndicadorProducao as Indicad13_14_0_, this_.Grupo as Grupo14_0_, this_.KDSProducao as KDSProd15_14_0_, this_.ImpressoraProducao as Impress16_14_0_, this_.SituacaoTributaria as Situaca17_14_0_, this_.ClassID as ClassID14_0_ FROM TBL_ITEM this_
NHibernate.SQL: 2012/11/06 08:54:32:425 [DEBUG] - SELECT this_.ObjectID as ObjectID10_1_, this_.Creation as Creation10_1_, this_.LastUpdate as LastUpdate10_1_, this_.LANC_VLR_VALORDESCONTO as LANC4_10_1_, this_.LANC_VLR_PERCENTUALDESCONTO as LANC5_10_1_, this_.LANC_DTHR_DATALANCAMENTO as LANC6_10_1_, this_.LANC_DT_MOVIMENTOFISCAL as LANC7_10_1_, this_.LANC_VLR_QUANTIDADE as LANC8_10_1_, this_.LANC_VLR_PRECOCADASTRO as LANC9_10_1_, this_.LANC_VLR_PRECOLIQUIDO as LANC10_10_1_, this_.LANC_VLR_VALORTAXASERVICO as LANC11_10_1_, this_.LANC_NUM_NUMEROSEQUENCIAL as LANC12_10_1_, this_.LANC_NUM_PEDIDOIMPRESSO as LANC13_10_1_, this_.DocumentoFiscal as Documen14_10_1_, this_.MotivoCancelamento as MotivoC15_10_1_, this_.Caixa as Caixa10_1_, this_.Usuario as Usuario10_1_, this_.Conta as Conta10_1_, this_.Item as Item10_1_, this_.Estacao as Estacao10_1_, this_.Estabelecimento as Estabel21_10_1_, this_.CCN as CCN10_1_, this_.Vendedor as Vendedor10_1_, this_.LocalEntrega as LocalEn24_10_1_, ccnalias1_.ObjectID as ObjectID15_0_, ccnalias1_.Creation as Creation15_0_, ccnalias1_.LastUpdate as LastUpdate15_0_, ccnalias1_.CCN_NUM_ATIVO as CCN4_15_0_, ccnalias1_.CCN_STR_NOME as CCN5_15_0_, ccnalias1_.CCN_STR_LOCALIZACAO as CCN6_15_0_, ccnalias1_.CCN_VLR_VALORTAXASERVICO as CCN7_15_0_, ccnalias1_.CCN_STR_NUMERO as CCN8_15_0_, ccnalias1_.CCN_NUM_CONCOMITANTE as CCN9_15_0_, ccnalias1_.Estabelecimento as Estabel10_15_0_, ccnalias1_.KDSProducao as KDSProd11_15_0_, ccnalias1_.ImpressoraDistribuicao as Impress12_15_0_, ccnalias1_.ImpressoraProducao as Impress13_15_0_ FROM TBL_LANCAMENTO this_ left outer join TBL_CCN ccnalias1_ on this_.CCN=ccnalias1_.ObjectID WHERE this_.Conta = @p0;@p0 = 16f7c9f4-f845-4ed5-9140-6d84a588e478 [Type: Guid (0)]
NHibernate.SQL: 2012/11/06 08:54:32:441 [DEBUG] - SELECT this_.ObjectID as ObjectID0_0_, this_.Creation as Creation0_0_, this_.LastUpdate as LastUpdate0_0_, this_.DOCFSC_VLR_VALORDESCONTO as DOCFSC4_0_0_, this_.DOCFSC_VLR_PERCENTUALDESCONTO as DOCFSC5_0_0_, this_.DOCFSC_VLR_VALORLIQUIDO as DOCFSC6_0_0_, this_.DOCFSC_DT_MOVIMENTOFISCAL as DOCFSC7_0_0_, this_.DOCFSC_DTHR_EMISSAO as DOCFSC8_0_0_, this_.DOCFSC_DTHR_CANCELAMENTO as DOCFSC9_0_0_, this_.DOCFSC_STR_NOMECONSUMIDOR as DOCFSC10_0_0_, this_.DOCFSC_STR_ENDERECOCONSUMIDOR as DOCFSC11_0_0_, this_.DOCFSC_STR_DOCUMENTOCONSUMIDOR as DOCFSC12_0_0_, this_.DOCFSC_STR_NUMERO as DOCFSC13_0_0_, this_.DOCFSC_STR_DESCMOTIVODESCONTO as DOCFSC14_0_0_, this_.DOCFSC_VLR_VALORVENDA as DOCFSC15_0_0_, this_.Caixa as Caixa0_0_, this_.Conta as Conta0_0_, this_.Tipo as Tipo0_0_, this_.UsuarioCancelamento as Usuario19_0_0_, this_.Usuario as Usuario0_0_, this_.MotivoCancelamento as MotivoC21_0_0_, this_.Estado as Estado0_0_, this_.MotivoDesconto as MotivoD23_0_0_ FROM TBL_DOCUMENTOFISCAL this_ WHERE this_.Conta = @p0 ORDER BY this_.DOCFSC_DT_MOVIMENTOFISCAL asc;@p0 = 16f7c9f4-f845-4ed5-9140-6d84a588e478 [Type: Guid (0)]

Isso ocorre no ato de selecionar uma conta de origem e depois uma destino, depois clico faço o evento q descrevi no post anterior clico na seta......viu como não aparece erro nenhum??

Robson Robsonalves.net
   - 06 nov 2012

O problema deve ser mais simples que pensamos, mas não consigo visualiza-lo =(

Fernanda Oliveira
   - 06 nov 2012

Na verdade não chega ser um erro.....

no caso é se faço o click funcionar na hora da seleção a setinha para de funcionar e vice-versa.

Robson Robsonalves.net
   - 06 nov 2012

Fernando, quando você utiliza os 'checks' ele usa a propriedade IsSelected.

E quando clica na seta ele valida se a linha selected é a última ou é a primeira linha....

Acredito que ele está se perdendo neste instante, algo não está permitindo a paginação...
remove essas validações de Ultimo e primeiro e testa o código com os checks...

Fernanda Oliveira
   - 08 nov 2012

Primeira não é com O e sim c A

FernandA

Segundo......vou testar conforme for aviso se deu certo!

Obrigada mais uma vez.

Robson Robsonalves.net
   - 08 nov 2012


Citação:
Primeira não é com O e sim c A

FernandA

Segundo......vou testar conforme for aviso se deu certo!

Obrigada mais uma vez.


kkkk desculpa!! eu sei Moça! eu digitei errado e quando eu vi já tinha enviado, aguardo seu contato!

Robson Robsonalves.net
   - 14 nov 2012

Eae FernadA

Chegou a solução?

Fernanda Oliveira
   - 19 nov 2012

Não cheguei não.

Mas por enquanto vou deixar quieto, pq isso são bonus no projeto, por enquanto não tenho mais tempo p bonus, mas vou voltar nisso ainda, pode deixar!

Enquanto isso, pesquiso em casa.

E vc, entendeu o q eu queria? entendeu q não uso checkbox? Preciso do comando via código?