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> 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

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

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.