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