Desabilitando checkbox no evento RowDataBound do gridview e Selecionando todos checkbox através de JavaScript

Nesse artigo iremos implementar no gridview o uso de checkbox onde iremos selecionar todos os checkbox através de javascript e dependendo da condição, quando o gridview é populado no evento RowDataBound iremos desabilitar o checkbox.

Nesse artigo iremos implementar no gridview o uso de checkbox onde iremos selecionar todos os checkbox através de javascript e dependendo da condição, quando o gridview é populado no evento RowDataBound iremos desabilitar o checkbox.

Vamos partir do princípio que já temos um projeto aberto onde temos uma conexão com o banco e um gridview. Adicionar no projeto um arquivo do tipo JScript.js com o nome selecionar.js onde o mesmo vai conter o conteúdo da Listagem 1

Listagem 1

//Função Check usado no GidView function SelecionaTodosChecks(spanChk){ var oItem = spanChk.children; var theBox= (spanChk.type=="checkbox") ? spanChk : spanChk.children.item[0]; xState=theBox.checked; elm=theBox.form.elements; for(i=0;i<elm.length;i++) if(elm[i].type=="checkbox" && elm[i].id!=theBox.id){ if(elm[i].checked!=xState) elm[i].click(); } }

Agora na página .aspx dentro da tag <head>head> colocar o caminho do arquivo selecionar.js conforme Listagem 2.

Listagem 2

<head id="Head1" runat="server"> <title>Nome do Projetotitle> <script src="../selecionar.js" type="text/javascript">script> <head>

No GridView vamos acrescentar um TemplateField  que vai conter o checkbox conforme Listagem 3.

Listagem 3<asp:TemplateField HeaderText="Selecione" Visible="true"> <ItemTemplate> <div id="divSelect" runat="server"> <asp:CheckBox ID="chkSelect" runat="server" /> div> ItemTemplate> <HeaderTemplate> <input id="chkAll" onclick="javascript:SelecionaTodosChecks(this);" runat="server" type="checkbox" /> HeaderTemplate> <HeaderStyle HorizontalAlign="Center" Width="10%" /> <ItemStyle HorizontalAlign="Center" /> </asp:TemplateField>

Ao acrescentar o TemplateField o gridview vai aparecer conforme a Figura 1 mostra como deve ficar o GridView. Nesse momento se clicar-mos no checkbox do topo o mesmo acionará o javascript e irá selecionar o demais.


Figura 1

Agora que já sabemos como selecionar todos os checkbox de uma só vez, Saberemos como desabilitar o checkbox no evento RowDataBound do GridView então no modo design clique no gridview(1) e depois vá na Aba Properties e clique em Events (2) e por fim clicar e RowDataBound(3) conforme figura 2.


Figura 2

Ao clicar duas vezes em Events vamos para o .cs da página onde vai aparecer o evento RowDataBound conforme Listagem 4 vamos ver como desabilitar todos os checkbox.

Listagem 4

protected void NomedoGridView_RowDataBound(object sender, GridViewRowEventArgs e) {       if (e.Row.RowType == DataControlRowType.DataRow)       {          CheckBox chkSelect = (CheckBox)e.Row.FindControl("chkSelect");          chkSelect.Attributes["disabled"] = "true";               } }

OBS: Agora podemos colocar um outro TemplateField e fazer condições onde dependendo do conteúdo desse novo TemplateField  você habilita ou desabilita o checkbox.

Exemplo

Colocar no GridView outro TemplateField que retornará o cargo conforme Listagem 5.

Listagem 5

<asp:TemplateField HeaderText="Cargo"> <ItemTemplate> <asp:Label ID="lblCargo" runat="server" Text=''>asp:Label> </ItemTemplate> <HeaderStyle Width="80%" /> </asp:TemplateField>

E no evento RowDataBound colocar o código conforme a Listagem 6.

Listagem 6

protected void NomedoGridView_RowDataBound(object sender, GridViewRowEventArgs e) {       if (e.Row.RowType == DataControlRowType.DataRow)       {          Label lblCargo= (Label)e.Row.FindControl("lblCargo");          CheckBox chkSelect = (CheckBox)e.Row.FindControl("chkSelect");           if (lblCargo.Text == "Desenvolvedor")             chkSelect.Attributes["disabled"] = "true";         else             chkSelect.Attributes["disabled"] = "false";         } }

Espero que tenham gostado e até o próximo artigo.

Artigos relacionados