Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
871
Assunto : ASP.NET
Titulo: Master/Detail com chave composta

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Fazer uma relação master/detail no ASP.NET 2.0 ficou algo absurdamente simples. Basta no datasource de detalhes apontar para o objeto de exibição do master como fornecedor de parâmetro e pronto, tudo funciona.

Mas quando a chave entre a master e a detail é composta, a coisa complica. O datakeynames do objeto de exibição do master tem 2 campos, então um vinculo direto ou não vai trazer nada ou vai gerar erro dependendo de como você faça.

Então a solução é fazer a finalização da relação master/detail realmente por código.

Primeiramente, ao montar o dataSource de details, você vai deixar o source dos parâmetros configurados como "none". Isso traz um problema : Quando você selecionar um registro no objeto master ele não vai entender que deve atualizar o detail.

No datasource de details colocamos os dois parâmetros e, da mesma forma, o source dos parâmetros será "none".

Precisamos então programar o selecting do datasource details para preencher os parâmetros. Porém quando programamos o selecting, o ASP.NET roda o selecting de imediato, acreditando que ele pode gerar a obtenção dos dados. Então devemos ter o cuidado de verificar se realmente existe um registro selecionado. Veja como fica :

Protected Sub SqlDataSource2_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) Handles SqlDataSource2.Selecting

If GridView1.SelectedIndex <> -1 Then
e.Command.Parameters("@userid").Value = GridView1.SelectedDataKey.Values.Item("UserId")
e.Command.Parameters("@productid").Value = GridView1.SelectedDataKey.Values.Item("ProductId")

End If

End Sub

Através da propriedade SelectedDataKey obtemos o valor de cada uma das chaves primárias. Mas você deve ser cuidadoso, o método item é sensível a caixa de letra.

O próximo passo é garantir que, selecionado um registro no objeto master (uma gridview, por exemplo, o objeto detail seja exibido. Esta parte é mais fácil :

Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged

GridView2.DataBind()

End Sub

Pronto, temos um master/detail com chave composta.


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
Nenhum comentário foi realizado ainda. Seja o primeiro !
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br