MultiSelect Without CTRL/SHIFT
05/11/2012
0
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!
Fernanda Oliveira
Posts
05/11/2012
Robson Alves
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!
05/11/2012
Fernanda Oliveira
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?
05/11/2012
Robson Alves
não será algum erro de implementação do campo ??
05/11/2012
Fernanda Oliveira
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
05/11/2012
Robson Alves
05/11/2012
Robson Alves
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.
05/11/2012
Fernanda Oliveira
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!
05/11/2012
Robson Alves
Pq só pode esta ocorrendo erro de index do gridview, tipo você está tentando acessar uma linha que não exista
05/11/2012
Joel Rodrigues
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?
06/11/2012
Fernanda Oliveira
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
06/11/2012
Robson Alves
Não tenho como simular seu ambiente =(
Você não captura nenhum erro em Debug ?
06/11/2012
Fernanda Oliveira
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??
06/11/2012
Robson Alves
06/11/2012
Fernanda Oliveira
no caso é se faço o click funcionar na hora da seleção a setinha para de funcionar e vice-versa.
06/11/2012
Robson Alves
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...
Clique aqui para fazer login e interagir na Comunidade :)