Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Estou tentando de algumas formas porem não estou chegando no resultado adequado, tenho um gridview que a primeira coluna é do tipo checkbox para poder "selecionar" a linha....
eu gostaria que o usuário pudesse selecionar apenas 1 checkbox dentro desse grid view ou que fosse desmarcado os checkbox que estivessem marcados.
Alguma sugestão...
A base para percorrer o grid view seria esta....
porem não sei em qual evento colocar ou de que forma usar para chegar no resultado esperado...
foreach (GridViewRow row in gvUsuarios.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox chkRow = (row.Cells[0].FindControl("chkUser") as CheckBox);
if (chkRow.Checked)
{
}
}
}Certo mas como vou desmarcar os checkbox que estavam marcados ao marcar um chkbox,
Pensei em uma logica, toda vez que um checkbox for marcado eu gravo o index dele, ou a linha dele, ai eu desmarco todos os checkbox e marco o checkbox que eu marquei o index ou a linha, como isso poderia ser feito....
A ideia é essa mesmo, já começou o código ? A dúvida esta exatamente em quais desses processos ? Comece o código e poste qual parte não esta dando certo.
fiz dessa forma e deu certo, faltou também colocar AutoPostBack="True" poderia me passar uma breve explicação sobre isso, migrei de windows form pra asp.net agora e são muitas duvidas... inclusive sobre PostBack parece ser simples mas não consegui entender muito bem ainda.
int index = 0;
foreach (GridViewRow rows in gvUsuarios.Rows)
{
if (rows.RowType == DataControlRowType.DataRow)
{
CheckBox chkRow = (rows.Cells[0].FindControl("chkUser") as CheckBox);
if (chkRow.Checked)
{
GridViewRow row = ((GridViewRow)((CheckBox)sender).NamingContainer);
index = row.RowIndex;
}
}
}
foreach (GridViewRow rows in gvUsuarios.Rows)
{
if (rows.RowType == DataControlRowType.DataRow)
{
for (int i = 0; i < rows.Cells.Count; i++)
{
CheckBox chkRow = (rows.Cells[i].FindControl("chkUser") as CheckBox);
if (chkRow.Checked == true)
{
if (rows.RowIndex != index)
{
chkRow.Checked = false;
}
}
}
}
}Existem 2 camadas:
-
Cliente -> onde está o asp.net e seu html
-
Servidor -> onde está o código c#
Quando se trabalha apenas com o asp.net na camada cliente (quando não esta usando angular, react, jquery, etc...) é necessário dar um "refresh" na página para que a comunicação entre cliente e sevidor aconteça. Quando você marca o AutoPostBack = true isso significa que qualquer mudança de valor nesse controle ele vai submeter a página novamente para o servidor para buscar mais informações.
Aqui tem uma explicação mais didática: https://www.devmedia.com.br/desvendando-asp-net-postback/29197
Cara me ajudou muito mesmo, muito obrigado.
Então esse trecho de código por uma breve explicação que vi no site da MS, se a pagina estiver sendo carregada pela primeira vez essa condição será verdadeira, se acontecer um post back ao clicar em um botão na parte cliente, esse código não sera executado. estou certo sobre isso ?
if(!isPostBack)
{
//executa validação ou alterações
}
Isso mesmo.
Você pode usar o CheckedChanged quando o usuário clicar no checkbox e assim verificar os demais valores:
<asp:TemplateField HeaderText="View">
protected void chkview_CheckedChanged(object sender, EventArgs e) {