Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Julio Marcos

GridView com CheckBox que adiciona registros

Recommended Posts

Primeiro vou mostrar as tabelas:

 

CREATE TABLE `funcionario` (
`idfuncionario` int(11) NOT NULL AUTO_INCREMENT,
`nomefuncionario` varchar(45) DEFAULT NULL,
`rgfuncionario` varchar(10) DEFAULT NULL,
`telefonefuncionario` varchar(45) DEFAULT NULL,
`emailfuncionario` varchar(45) DEFAULT NULL,
`cpf` varchar(45) DEFAULT NULL,
`pis` varchar(45) DEFAULT NULL,
`profissao` varchar(45) DEFAULT NULL,
`enderecofuncionario` varchar(100) NOT NULL,
`bairrofuncionario` varchar(40) NOT NULL,
`cidadefuncionario` varchar(40) NOT NULL,
`pontuacao_idpontuacao` int(11) DEFAULT NULL,
`gerente_idgerente` int(11) DEFAULT NULL,
PRIMARY KEY (`idfuncionario`),
KEY `fk_funcionario_pontuacao` (`pontuacao_idpontuacao`),
KEY `fk_funcionario_gerente` (`gerente_idgerente`),
CONSTRAINT `fk_funcionario_gerente` FOREIGN KEY (`gerente_idgerente`) REFERENCES `gerente` (`idgerente`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_funcionario_pontuacao` FOREIGN KEY (`pontuacao_idpontuacao`) REFERENCES `pontuacao` (`idpontuacao`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

CREATE TABLE `festa` (
`idfesta` int(11) NOT NULL AUTO_INCREMENT,
`datafesta` date DEFAULT NULL,
`horafesta` time NOT NULL,
`tipofesta` varchar(45) DEFAULT NULL,
`valor` float DEFAULT NULL,
`nconvidadosfesta` int(11) NOT NULL,
`precopessoafesta` float NOT NULL,
`duracaofesta` tinyint(4) NOT NULL,
`decoracaofesta` tinyint(1) NOT NULL,
`mesafriosfesta` tinyint(1) NOT NULL,
`mesasaidafesta` tinyint(1) NOT NULL,
`bolofesta` tinyint(1) NOT NULL,
`docesfesta` tinyint(1) NOT NULL,
`djfesta` tinyint(1) NOT NULL,
`bebalcoolfesta` tinyint(1) NOT NULL,
`comentariosfesta` text NOT NULL,
`cliente_idcliente` int(11) DEFAULT NULL,
`checklist_idchecklist` int(11) DEFAULT NULL,
`gerente_idgerente` int(11) DEFAULT NULL,
PRIMARY KEY (`idfesta`),
KEY `fk_festa_checklist` (`checklist_idchecklist`),
KEY `fk_festa_gerente` (`gerente_idgerente`),
CONSTRAINT `fk_festa_checklist` FOREIGN KEY (`checklist_idchecklist`) REFERENCES `checklist` (`idchecklist`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_festa_gerente` FOREIGN KEY (`gerente_idgerente`) REFERENCES `gerente` (`idgerente`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=latin1

CREATE TABLE `recibo` (
`idrecibo` int(11) NOT NULL AUTO_INCREMENT,
`festa_idfesta` int(11) NOT NULL,
`funcionario_idfuncionario` int(11) NOT NULL,
`assinadorecibo` tinyint(1) NOT NULL,
`escaladorecibo` tinyint(1) NOT NULL,
PRIMARY KEY (`idrecibo`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

 

Preciso mostrar uma listagem de todos os funcionáios com uma CheckBox do lado para indicar se aquele profissional está escalado ou não.

No entanto, não posso garantir que os registros da tabela 'recibo' já foram criados para poder marcar o CheckBox em um GridView.

Esta listagem é acessada por um link específico para cada festa. Pensei em criar todos os 'recibos' de cada festa no momento em que o evento é cadastrado, não sei se isso é uma boa solução.

Resumindo.. Gostaria de criar uma listagem (de aparencia parecida ou igual ao de uma GridView) de todos os profissionais com um checkbox ao lado para que ao marcar ou desmarcar os devidos 'recibos' fossem criados/alterados.

 

Tenho certeza que não fui muito claro, se n entenderem o problema eu tento explicar outra vez.

Desde já meu muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um dos problemas é esta consulta.

Você está conseguindo entender meu problema?

 

Se eu der um SELECT de todos os funcionarios, como irei fazer pra marcar os checkboxes (q é uma propriedade da tabela recibo) ?

Se eu der um SELECT dos recibos não vai da pra adicionar os novos recibos.

Eu posso dar um select com JOIN das duas tabelas, mas não posso garantir que todos os recibos vão estar relacionados com cada funcionário para poder marcar os checkboxes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não entendi.

 

O que você quer listar de verdade?

E pra qual finalidade os check?

 

A meu entender da pra listar de varias formas, usando Join ou Select aninhados ou ate mesmo Griviews aninanhados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vejamos se eu entendi:

 

1) Você tem uma tabela de funcionários que será usada para todos os seu eventos.

2) Você tem uma tabela de eventos onde são registrados os eventos de sua empresa.

3) Você tem uma tabela de recibos que idicam os funcionários que participam do eventos (uma tabela relacional).

4) Ao selecionar um evento será exibido um grid com os funcionários para "selecionar" quais são os funcionários que irão participar do evento.

 

 

Partindo desta premissa, existem muitas formas de fazer isso:

Se a tela será só de inserção, pode ser desenvoldido de uma forma rápida e simples, se for de inclusão / alteração, isso tornará um pouco mais complicada. Contudo acredito que explicando o básico você conseguirá fazer o complexo. http://forum.imasters.com.br/public/style_emoticons/default/excl.gif

 

1) Comece montando uma classe funcionário contendo apenas os campos que serão apresentados na Grid.

2) Adicione um campo a mais (bool) que representará se o funcionário participa ou não do evento em questão.

3) O id do evento em questão pode estar em qualquer outra váriavel de sessão.

4) Crie uma lista desta classe usando Generics List<>.

5) Utilize esta lista com seu DataSource dentro do DataGrid

6) Em seu DataGrid, crie um template com um checkbox em modo de visualização que fará a referencia com o campo a mais solicitado no item dois.

7) Mantendo a lista em uma Session e conectada ao DataGrid, após a pessoa ter selecionado os funcionarios faça uma query em sua lista usando Link para só extrair os registros que estão com o campo como True.

8) Com a nova lista faça um foreach inserindo os funcionários na tabela Recibo juntamente com o código de evento previamente gravado na Session.

 

 

Feito isso você pode criar uma outra te-la para dar manutenção na tabela Recibo pra facilitar as coisas... se pretende fazer tudo em uma tela só terá que seguir o mesmo principio acima, porém ao carregar os dados no 3 faça um join com a tabela de recibo para carregar o campo booleano e sempre limpando a tabela antes do passo 8.

 

Tudo dito acima vai parecer um mosntro se você nunca trabalhou com Generics ou Linq, porém verá que será amis facil que se trabalhar com DataTables e DataSets.

 

Vou tentar listar abaixo a sua estrutura básica:

 

// Casse de Funcionários
[Serialize]
public class funcionario
{
   public int Id { get; set; }
   public string Nome { get; set; }
   // A propriedade abaixo será a que controla a participação do funcionário
   public bool Participa { get; set; }
}

//Sua variavel de Lista
List<Funcionario> lstFuncionario;

//Suas sessões
Session["IdEvento"];
Session["lstFuncionario"];

//Seus Metodos

//Metodo que vai criar a lista de funcionários conectando-se ao banco
public List<Funcionario> ListarFuncionarios();

//Metodo que vai gravar a lista de funcionarios que irão participar do evento
public void GravarRecibo(int idEvento, List<Funcionario> lstFuncionario);

//Codigo para selecionar somente os funcionários que a propriedade Participa = true
 List<Funcionario> lstParticipantes = lstFuncionario.FindAll(delegate(Funcionario f) { return f.Participa == true; });

Bom, acredito que com isso já consiga a dar andamento a processo que esta procurando.

 

Espero te-lo ajudado, ;)

 

Angelo Compri

Compartilhar este post


Link para o post
Compartilhar em outros sites

Angelo Compri, você acertou em cheio o que quero fazer. Quero fazer uma tela de inclusão/alteração.

Vou começar a implementar partindo das suas ideias. Por enquanto eu utilizei uma outra abordagem por causa de prazo, mas vou tentar aprender sobre Generics e um pouco mais de LINQ para fazer a tela do modo que me pediram.

 

Muito Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.