Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 ACTIONCREATE 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 ACTIONCREATE 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.
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.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.
Ta meio consufo mesmo, acho que o primeiro passo era postar no fórum de banco de dados e ter certeza do sql que irá usar.
Abraços...
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
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!
Primeiro passo é montar seu Sql para trazer os dados como deseja, isto ja esta ok?
Abraços...