Como excluir uma linha de um GridView usando dados não-visíveis?
-
03-07-2019 - |
Pergunta
Eu estou escrevendo um front-end simples protótipo usando um GridView que é preenchido via função, em vez de ser ligada diretamente a uma fonte de dados SQLServer.
Assim eu posso excluir uma linha / registro de grid / banco de dados subjacente Estou atualmente
- Definir a AutoGenerateDeleteButton = true
- Exibindo os IDs de registro únicas na primeira coluna
- Manipulação o evento RowDeleting
- A obtenção da ID, obtendo os grid.Rows [e.RowIndex] .Cells [idIndex] .Text
- Passando esse número por meio de uma função que faz o apagamento
Este parece estar funcionando muito bem, mas eu prefiro não exibir os ids para os usuários a fazer qualquer coisa não significa para eles.
Eu tentei configuração propriedade Visible da coluna id como falso, mas este passo 4 acima causados ??a devolver uma cadeia vazia - e assim não há registro excluído
.Então, como faço para armazenar o número do ID hidded com cada linha?
Ou eu estou lidando com isso de forma completamente errada?
Siga até respostas:
Obrigado por ambas as respostas, acabou indo maneira DataKeyNames de Eric. Para outras pessoas novas para ASP.NET como eu sou, os passos que eu usei onde
-
Entre as linhas onde as grelhas definidos fonte de dados e chamado DataBind (), I adicionou
grid.DataKeyNames = new string[] {"id"};
-
Em seguida, na função de manipulação do RowDeleting eu tenho de segurar a minha id usando
grid.DataKeys[e.RowIndex].Value
Solução
GridView tem uma propriedade DataKeyNames. Quando você vincular uma fonte de dados para a rede, você define as DataKeyNames (geralmente com apenas um nome, seu campo PK). Você não mostram o PK, mas você pode obtê-lo a partir do código-behind.
Outras dicas
Visible = false significa não aparecerem na página. O que você quer ou é para torná-lo um campo de modelo e usar um HiddenField para manter o valor ou definir o estilo do controle para "display: none;". Este seria o caso se o código do lado do cliente precisava de acesso ao valor de uma chamada Ajax ou algo assim.
Caso contrário, use a propriedade DataKeyNames como @Eric Z Beard sugere.