Usuário com melhor resposta
Dúvida CheckBox

Pergunta
-
Bom dia galera,
já andei olhando alguns posts aki no grupo, mas nada me ajudou.
minha dúvida é simples, tenho um Grid com um TemplateField para o campo checkbox "ChkDocs", coloquei também um HeaderTemplate com um checkbox "ChkAll" para realizar a função de selecionar todas as linhas do Grid. O que eu preciso é o seguinte:
- clicar no CheckAll para selecionar todos os registros, clicar novamente desmarca todos: OK
o que tá pegando é o segunite, eu quero que o checkbox "CheckAll " quando estiver selecionado e eu tirar a seleção de uma das linhas do Grid, o "CheckAll " tem que perder a seleção, ficar desmarcado deixando apenas as linhas não desmarcadas pelo usuário.
segue o código que estou utilizando:
<%@ Page Title="" Language="C#" MasterPageFile="~/fup_servicos/fup_servicos.master" AutoEventWireup="true" CodeBehind="incluir_dtlec.aspx.cs" Inherits="SisGem.WEB.fup_servicos.recebimento_doc.incluir_dtlec" %> <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> <asp:Content ID="SisGemScripts" ContentPlaceHolderID="head" runat="server"> <script src="../../scripts/Funcoes.js" type="text/javascript"></script> <script type="text/javascript" language="javascript"> </script> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <!-- inicio #formulario --> <asp:UpdatePanel runat="server" ID="upFiltro" UpdateMode="Conditional"> <ContentTemplate> <asp:Panel ID="pnlFiltro" runat="server" Visible="true"> <div class="TituloPagina"> <asp:Label ID="lblTitulo" runat="server" Text="Enviar e-DTL-EC"></asp:Label> </div> <div id="FiltroBusca"> <table id="tbFiltroBusca" border="1" width="100%"> <tr> <td> <asp:LinkButton runat="server" ID="lnkfake"></asp:LinkButton> </td> </tr> <tr> <td width="100%"> <table id="Table2" border="1" width="100%" align="center"> <tr> <td align="left"> <table width="100%" cellpadding="1" cellspacing="1" style="height: 17px"> <table border="0"> <tr> <td class="style7"> <asp:Label ID="lblNum_DTLEC" runat="server" CssClass="campos">N° DTL-EC:</asp:Label> </td> <td> <asp:TextBox ID="txtNum_DTLEC" runat="server" CssClass="CaixaTexto" MaxLength="8" ValidationGroup="MKE" Width="92px"></asp:TextBox> </td> <td class="style10"> <asp:Label ID="lblNumDoc" runat="server" CssClass="campos">N° Documento:</asp:Label> </td> <td> <asp:TextBox ID="txtNumDoc" runat="server" CssClass="CaixaTexto" MaxLength="8" ValidationGroup="MKE" Width="92px"></asp:TextBox> </td> <td class="style3"> <asp:Label ID="lblDTLEC_DATA_ENVIO" runat="server" CssClass="campos">Data de envio:</asp:Label> </td> <td class="style2"> <asp:TextBox ID="txtSOLIC_DATA_INCLUSAO" runat="server" CssClass="CaixaTexto" MaxLength="8" Style="text-align: justify" ValidationGroup="MKE" Width="70px"></asp:TextBox> <td class="style8"> <asp:ImageButton ID="imgCal" runat="server" CausesValidation="False" ImageUrl="~/images/Calendar_scheduleHS.png" /> </td> <asp:MaskedEditExtender ID="mskexDeliv" runat="server" AcceptNegative="Left" DisplayMoney="Left" ErrorTooltipEnabled="True" Mask="99/99/9999" MaskType="Date" MessageValidatorTip="true" OnFocusCssClass="MaskedEditFocus" OnInvalidCssClass="MaskedEditError" TargetControlID="txtSOLIC_DATA_INCLUSAO"> </asp:MaskedEditExtender> <asp:MaskedEditValidator ID="mevDeliv" runat="server" ControlExtender="mskexDeliv" ControlToValidate="txtSOLIC_DATA_INCLUSAO" Display="Dynamic" EmptyValueBlurredText="*" InvalidValueBlurredMessage="*" InvalidValueMessage="Data inválida" Style="color: Red; display: none;" ValidationGroup="MKE"></asp:MaskedEditValidator> <asp:CalendarExtender ID="calendarDELIV" runat="server" PopupButtonID="imgCal" TargetControlID="txtSOLIC_DATA_INCLUSAO"> </asp:CalendarExtender> </td> <td class="style6"> <asp:Label ID="lblDATA_RECEBIMENTO" runat="server" CssClass="campos">Data de recebimento:</asp:Label> </td> <td> <asp:TextBox ID="txtSOLIC_DATA_CONCLUSAO" runat="server" CssClass="CaixaTexto" MaxLength="8" Style="text-align: justify" ValidationGroup="MKE2" Width="70px"></asp:TextBox> <td class="style9"> <asp:ImageButton ID="imgCal2" runat="server" CausesValidation="False" ImageUrl="~/images/Calendar_scheduleHS.png" /> </td> <asp:MaskedEditExtender ID="mskexDeliv2" runat="server" AcceptNegative="Left" DisplayMoney="Left" ErrorTooltipEnabled="True" Mask="99/99/9999" MaskType="Date" MessageValidatorTip="true" OnFocusCssClass="MaskedEditFocus" OnInvalidCssClass="MaskedEditError" TargetControlID="txtSOLIC_DATA_CONCLUSAO"> </asp:MaskedEditExtender> <asp:MaskedEditValidator ID="mevDeliv2" runat="server" ControlExtender="mskexDeliv2" ControlToValidate="txtSOLIC_DATA_CONCLUSAO" Display="Dynamic" EmptyValueBlurredText="*" InvalidValueBlurredMessage="*" InvalidValueMessage="Data inválida" Style="color: Red; display: none;" ValidationGroup="MKE2"></asp:MaskedEditValidator> <asp:CalendarExtender ID="calendarDELIV2" runat="server" PopupButtonID="imgCal2" TargetControlID="txtSOLIC_DATA_CONCLUSAO"> </asp:CalendarExtender> </td> </tr> </table> </td> <tr> <td align="left" valign="middle" rowspan="2"> <asp:Button CssClass="Botao" ID="btnPesq" runat="server" TabIndex="2" Text="Pesquisar" OnClick="btnPesq_Click"></asp:Button> <asp:Button CssClass="Botao" ID="btnLimpar" runat="server" TabIndex="2" Text="Limpar" OnClick="btnLimpar_Click" ToolTip="Limpar campos de filtro"></asp:Button> </td> </tr> </tr> </table> </tr> </table> </td> </tr> <tr> <td> <!-- inicio #Panel Grid de Consulta --> <table width="100%" align="center" id="Table1"> <tr> <td> <table id="Table3" width="100%" border="1" align="center" bgcolor="whitesmoke"> <tr> <asp:GridView ID="grdBuscaDoc" runat="server" AutoGenerateColumns="False" Width="100%" PageSize="20" DataKeyNames="DOC_ID" ToolTip="Selecione os documentos recebidos"> <Columns> <asp:TemplateField> <HeaderTemplate> Documentos Recebidos <br /> <asp:CheckBox ID="chkAll" runat="server" onclick="checkAll(this);" AutoPostBack="true" /> </HeaderTemplate> <ItemTemplate> <asp:CheckBox ID="chkDocs" runat="server" OnCheckedChanged="chkDocOnCheckedChanged" AutoPostBack="true" /> </ItemTemplate> <ItemStyle HorizontalAlign="Center" /> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> ID </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblDOC" runat="server" Text='<%#Eval("DOC_ID")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> TD </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblTD" runat="server" Text='<%#Eval("TD")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Assunto </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblAssunto" runat="server" Text='<%#Eval("BC")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" Width="80px" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Estrutura </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblFuncao" runat="server" Text='<%#Eval("OS1_FUNCT")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> DTL </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblNumDTL" runat="server" Text='<%#Eval("NUM_DTL")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Descrição </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblDescricao" runat="server" Text='<%#Eval("DESIGNATION")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Número Documento </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblDatReceb" runat="server" Text='<%#Eval("DOCUMENT_NO")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Revisão </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblLoginReceb" runat="server" Text='<%#Eval("REVISAO")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField Visible="false"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Data Revisão </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblDocStatus" runat="server" Text='<%#Eval("REV_DATE")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Quantidade Documentos </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblStatusDTLEC" runat="server" Text='<%#Eval("QUANT_DOC")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> <AlternatingRowStyle BackColor="whitesmoke" /> <FooterStyle BackColor="#CCCCCC" ForeColor="Black" /> <HeaderStyle BackColor="#003F86" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#003F86" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="White" ForeColor="Black" /> <SortedAscendingCellStyle BackColor="#F1F1F1" /> <SortedAscendingHeaderStyle BackColor="#0000A9" /> <SortedDescendingCellStyle BackColor="#CAC9C9" /> <SortedDescendingHeaderStyle BackColor="#000065" /> <EmptyDataTemplate> Não existe elemento para associar ao grupo. </EmptyDataTemplate> <SortedAscendingCellStyle BackColor="#F1F1F1" /> <SortedAscendingHeaderStyle BackColor="#0000A9" /> <SortedDescendingCellStyle BackColor="#CAC9C9" /> <SortedDescendingHeaderStyle BackColor="#000065" /> </asp:GridView> </tr> </table> </td> </tr> </table> <tr> <td style="padding: 10px 10px 10px 10px;" bgcolor="#248CC0"> <asp:Button ID="btnPesqIncluir" runat="server" CssClass="Botao" Text="Gerar eDTL-EC - CEC" OnClick="btnPesqIncluir_Click" Width="136px" /> </td> </tr> </table> <tr> <td> </td> </tr> </td> </tr> </div> </asp:Panel> <!-- fim #formulario --> </ContentTemplate> </asp:UpdatePanel> </asp:Content>
Marcos Paulo - Analista de Sistemas
Respostas
-
Fala Marcos.
Cara controla isso em jquery. Muito mais interativo.
Esse link está completo.
Espero que ajude.
- Sugerido como Resposta Leonardo Lourenço Silva quarta-feira, 11 de setembro de 2013 17:20
- Marcado como Resposta Marcos Paulo P.M quarta-feira, 11 de setembro de 2013 17:33
-
Marcos, como falei anteriormente falta o FindControl nesse carinha aqui:
if (((CheckBox)grdBuscaDoc.Rows[i].Cells[0].FindControl("chkDocs")).Checked == true) { DataRow dr = dt.NewRow(); dr["DOC_ID"] = ((Label)grdBuscaDoc.Rows[i].Cells[1].FindControl("")).Text.Trim(); dr["TD"] = grdBuscaDoc.Rows[i].Cells[2].Text.Trim(); dr["BC"] = grdBuscaDoc.Rows[i].Cells[3].Text.Trim(); dr["OS1_FUNCT"] = grdBuscaDoc.Rows[i].Cells[4].Text.Trim(); dr["NUM_DTL"] = grdBuscaDoc.Rows[i].Cells[5].Text.Trim(); dr["DESIGNATION"] = grdBuscaDoc.Rows[i].Cells[6].Text.Trim(); dr["DOCUMENT_NO"] = grdBuscaDoc.Rows[i].Cells[7].Text.Trim(); dr["REVISAO"] = grdBuscaDoc.Rows[i].Cells[8].Text.Trim(); dr["REV_DATE"] = grdBuscaDoc.Rows[i].Cells[9].Text.Trim(); dr["QUANT_DOC"] = grdBuscaDoc.Rows[i].Cells[10].Text.Trim(); dt.Rows.Add(dr); }
Eu inclui no primeiro item.
Pra você ter a ideia do esquema.
Se você debugar vai ver que ele estes itens da linha selecionada vão estar sem valor algum.
Vai na fé malandro que agora vai funfa. hehehehe..
Abraço.
- Marcado como Resposta Marcos Paulo P.M sexta-feira, 13 de setembro de 2013 10:40
Todas as Respostas
-
Amigo,
Acredito que a solução seja você colocar uma verificação dentro do método "chkDocOnCheckedChange" onde ele verifica se o CHECKALL está marcado, caso esse cara esteja e o valor recebido pelo método do checkbox seja FALSE ele desmarca o CHECKALL.
Se o CHECKALL estiver funcionando você já resolveu 99% do problema.
Espero ter ajudado e boa sorte!
Não esqueça de marcar como útil uma resposta que te ajude.
"A diversão é a alma do negócio" -
Fala Marcos.
Cara controla isso em jquery. Muito mais interativo.
Esse link está completo.
Espero que ajude.
- Sugerido como Resposta Leonardo Lourenço Silva quarta-feira, 11 de setembro de 2013 17:20
- Marcado como Resposta Marcos Paulo P.M quarta-feira, 11 de setembro de 2013 17:33
-
Fala Marcos.
Cara controla isso em jquery. Muito mais interativo.
Esse link está completo.
Espero que ajude.
ok Fernando, agora esta parte esta funcionando legal, oq pega agora é o seguinte, quando clico no botão gerar Grid, o novo grid não esta sendo gerado. vou postar o código aqui da função que faz isso, e vc se consegue entender oq ta errado por favor.
Desde já agradeço a sua ajuda.
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { numDTL = txtNum_DTLEC.Text; numDoc = txtNumDoc.Text; var bll_listdocs = new BLLDtl(); var listdocs = bll_listdocs.ListarDocsIsoSup(numDTL, numDoc); grdBuscaDoc.Visible = true; grdBuscaDoc.DataSource = listdocs; grdBuscaDoc.DataBind(); } } private void GetData() { DataTable dt; if (ViewState["SelectedRecords"] != null) dt = (DataTable)ViewState["SelectedRecords"]; else dt = CreateDataTable(); CheckBox checkAll = (CheckBox)grdBuscaDoc.HeaderRow.Cells[0].FindControl("chkAll"); for (int i = 0; i < grdBuscaDoc.Rows.Count; i++) { if (checkAll.Checked) { dt = AddRow(grdBuscaDoc.Rows[i], dt); } else { CheckBox chkDocs = (CheckBox)grdBuscaDoc.Rows[i].Cells[0].FindControl("chkDocs"); if (chkDocs.Checked) { dt = AddRow(grdBuscaDoc.Rows[i], dt); } else { dt = RemoveRow(grdBuscaDoc.Rows[i], dt); } } } ViewState["SelectedRecords"] = dt; } private DataTable CreateDataTable() { DataTable dt = new DataTable(); dt.Columns.Add("DOC_ID"); dt.Columns.Add("TD"); dt.Columns.Add("BC"); dt.Columns.Add("OS1_FUNCT"); dt.Columns.Add("NUM_DTL"); dt.Columns.Add("DESIGNATION"); dt.Columns.Add("DOCUMENT_NO"); dt.Columns.Add("REVISAO"); dt.Columns.Add("REV_DATE"); dt.Columns.Add("QUANT_DOC"); dt.AcceptChanges(); return dt; } private void SetData() { CheckBox checkAll = (CheckBox)grdBuscaDoc.HeaderRow.Cells[0].FindControl("chkAll"); checkAll.Checked = true; if (ViewState["SelectedRecords"] != null) { DataTable dt = (DataTable)ViewState["SelectedRecords"]; for (int i = 0; i < grdBuscaDoc.Rows.Count; i++) { CheckBox chkDocs = (CheckBox)grdBuscaDoc.Rows[i].Cells[0].FindControl("chkDocs"); if (chkDocs != null) { DataRow[] dr = dt.Select("DOC_ID = '" + grdBuscaDoc.Rows[i].Cells[1].Text + "'"); chkDocs.Checked = dr.Length > 0; if (!chkDocs.Checked) { checkAll.Checked = false; } } } } } private DataTable AddRow(GridViewRow gvRow, DataTable dt) { DataRow[] dr = dt.Select("DOC_ID = '" + gvRow.Cells[1].Text + "'"); if (dr.Length <= 0) { dt.Rows.Add(); dt.Rows[dt.Rows.Count - 1]["DOC_ID"] = gvRow.Cells[1].Text; dt.Rows[dt.Rows.Count - 1]["TD"] = gvRow.Cells[2].Text; dt.Rows[dt.Rows.Count - 1]["BC"] = gvRow.Cells[3].Text; dt.Rows[dt.Rows.Count - 1]["OS1_FUNCT"] = gvRow.Cells[4].Text; dt.Rows[dt.Rows.Count - 1]["NUM_DTL"] = gvRow.Cells[5].Text; dt.Rows[dt.Rows.Count - 1]["DESIGNATION"] = gvRow.Cells[6].Text; dt.Rows[dt.Rows.Count - 1]["DOCUMENT_NO"] = gvRow.Cells[7].Text; dt.Rows[dt.Rows.Count - 1]["REVISAO"] = gvRow.Cells[8].Text; dt.Rows[dt.Rows.Count - 1]["REV_DATE"] = gvRow.Cells[9].Text; dt.Rows[dt.Rows.Count - 1]["QUANT_DOC"] = gvRow.Cells[10].Text; dt.AcceptChanges(); } return dt; } private DataTable RemoveRow(GridViewRow gvRow, DataTable dt) { DataRow[] dr = dt.Select("DOC_ID = '" + gvRow.Cells[1].Text + "'"); if (dr.Length > 0) { dt.Rows.Remove(dr[0]); dt.AcceptChanges(); } return dt; } private void BindSecondaryGrid() { DataTable dt = (DataTable)ViewState["SelectedRecords"]; grdDocSelecionado.DataSource = dt; grdDocSelecionado.DataBind(); } protected void OnPaging(object sender, GridViewPageEventArgs e) { GetData(); grdBuscaDoc.PageIndex = e.NewPageIndex; atualizaGrid(numDTL, numDoc); SetData(); } protected void chkAllOnCheckedChanged(object sender, EventArgs e) { } protected void btnPesqIncluir_Click(object sender, EventArgs e) { GetData(); SetData(); BindSecondaryGrid(); }
Ve se consegue entender porque ele não carrega o Grid com as informações das linhas selecionadas. oq ta acontecendo é o seguinte, quando seleciono todas as linhas com o chkAll e clico pra gerar o novo grid, ele gera o grid com todas colunas, mas sem as linhas selecionadas no grid anterior, qnd seleciono algumas linhas aleatoriamente, ele não carrega o grid, e qnd seleciono a última linha do grid, não sei pq ele carrega o grid como se tivesse selecionado o chkAll, gera o grid, mas sem dados.
se precisar de mais alguma informação é só me falar
Abraço...
Marcos Paulo - Analista de Sistemas
-
Fala Marcos, então cara aparentemente não tem nada de errado, o correto era você ir debugando seu código desde a ação do botão verificando no watch e vendo como estão sendo adicionados os dados, se eles não estão sendo sobre escritos e por ai vai cara.
Vi uma coisa aqui que não sei se é necessário.
for (int i = 0; i < grdBuscaDoc.Rows.Count; i++) { if (checkAll.Checked) { dt = AddRow(grdBuscaDoc.Rows[i]); } }
Eu apenas tirei o AddRow(grdBuscaDoc.Rows[i]. dt).
O resto creio que não tenha grilo não cara.
Mas faz isso debuga com calma que você vai encontrar onde está acontecendo.
Abraço.
-
Fala Marcos, então cara aparentemente não tem nada de errado, o correto era você ir debugando seu código desde a ação do botão verificando no watch e vendo como estão sendo adicionados os dados, se eles não estão sendo sobre escritos e por ai vai cara.
Vi uma coisa aqui que não sei se é necessário.
for (int i = 0; i < grdBuscaDoc.Rows.Count; i++) { if (checkAll.Checked) { dt = AddRow(grdBuscaDoc.Rows[i]); } }
Eu apenas tirei o AddRow(grdBuscaDoc.Rows[i]. dt).
O resto creio que não tenha grilo não cara.
Mas faz isso debuga com calma que você vai encontrar onde está acontecendo.
Abraço.
Marcos Paulo - Analista de Sistemas
-
Mas ele da algum erro?
O método é o setData() correto?
Tente adicionar as linhas assim:
DataTable mDataTable = new DataTable(); mDataTable.Columns.Add("DOC_ID"); mDataTable.Columns.Add("DADOS"); DataRow linha; for (int i = 0; i < 10; i++) { linha = mDataTable.NewRow(); //gera o n£mero GUID linha["DOC_ID"] = i.ToString(); linha["DADOS"] = "Teste Fernando Carregamento Grid:" + i.ToString(); mDataTable.Rows.Add(linha); }
Pode ser que ele está se perdendo em algum ponto na hora de adicionar a linha.
Abraço.
-
Mas ele da algum erro?
O método é o setData() correto?
Tente adicionar as linhas assim:
DataTable mDataTable = new DataTable(); mDataTable.Columns.Add("DOC_ID"); mDataTable.Columns.Add("DADOS"); DataRow linha; for (int i = 0; i < 10; i++) { linha = mDataTable.NewRow(); //gera o n£mero GUID linha["DOC_ID"] = i.ToString(); linha["DADOS"] = "Teste Fernando Carregamento Grid:" + i.ToString(); mDataTable.Rows.Add(linha); }
Pode ser que ele está se perdendo em algum ponto na hora de adicionar a linha.
Abraço.
Marcos Paulo - Analista de Sistemas
-
Cara tenta fazer seu if do check box assim:
if (((CheckBox)grdBuscaDoc.Rows[i].Cells[0].FindControl("chkDocs")).Checked == true)
{
DataRow[] dr = dt.Select("DOC_ID = '" + grdBuscaDoc.Rows[i].Cells[1].Text + "'");
chkDocs.Checked = dr.Length > 0;
}
Verifique sempre se ele etá selecionado, acho que é mais correto que você validar se está null. -
Cara tenta fazer seu if do check box assim:
if (((CheckBox)grdBuscaDoc.Rows[i].Cells[0].FindControl("chkDocs")).Checked == true)
{
DataRow[] dr = dt.Select("DOC_ID = '" + grdBuscaDoc.Rows[i].Cells[1].Text + "'");
chkDocs.Checked = dr.Length > 0;
}
Verifique sempre se ele etá selecionado, acho que é mais correto que você validar se está null.Fiz dessa maneira Fernando, resolveu a questão de marcar todos os anteriores, mas continua montando o Grid vazio, eu tirei o AccessKey='<%# Container.DataItemIndex %>' do primeiro Grid, pois não consegui resolver de maneira nenhuma aquela questão do AccesKey Too Long, infelizmente não posso montar o grid daquele jeito que vc flw porque os dados são variados, vão ter dados novos praticamente todo dia.só ta faltando essa questão de carregar os dados selecionados mesmo... fico no aguardo de mais alguma dica... abraço
Marcos Paulo - Analista de Sistemas
- Editado Marcos Paulo P.M quinta-feira, 12 de setembro de 2013 11:27 tr
-
Marcos, eu fiz os testes no código que você me passou pelo email, deixei apenas a grid, fiz um DataTable de testes e funcionou file.
Eu no seu caso faria o básico Marcos.
Um bind(), seleção de dados recupera o selecionado, adiciona em um DataTable novo (sempre) e utiliza esse DataTable para trabalhar.
Quando você tenta adicionar em um DataTable já existente você pode perder dados por algum motivo "bobo" sem perceber.
Tente também Marcos executar sua aplicação de forma "picada", parte a parte, assim você pode encontrar o erro mais facilmente.
Abraço, Good Luck.
-
Marcos, eu fiz os testes no código que você me passou pelo email, deixei apenas a grid, fiz um DataTable de testes e funcionou file.
Eu no seu caso faria o básico Marcos.
Um bind(), seleção de dados recupera o selecionado, adiciona em um DataTable novo (sempre) e utiliza esse DataTable para trabalhar.
Quando você tenta adicionar em um DataTable já existente você pode perder dados por algum motivo "bobo" sem perceber.
Tente também Marcos executar sua aplicação de forma "picada", parte a parte, assim você pode encontrar o erro mais facilmente.
Abraço, Good Luck.
Marcos Paulo - Analista de Sistemas
-
Fala Marcos, cara eu só vi agora.
Você está recuperando o valor das colunas errado cara. Como são ItemTemplates você deve utilizando o FindControl para todas as Labels.
Segue o código.
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.GeraGrid(this.CriarDataTable()); } } protected void chkTeste_CheckedChanged(object sender, EventArgs e) { this.GeraGrid(this.CriarDataTable()); } private DataTable CriarDataTable() { DataTable mDataTable = new DataTable(); //mDataTable.Columns.Add("DOC_ID"); //mDataTable.Columns.Add("DADOS"); ////criando as colunas mDataTable.Columns.Add(new DataColumn("DOC_ID")); mDataTable.Columns.Add(new DataColumn("DADOS")); DataRow linha; for (int i = 0; i < 10; i++) { linha = mDataTable.NewRow(); //gera o n£mero GUID linha["DOC_ID"] = i.ToString(); linha["DADOS"] = "Teste Fernando Carregamento Grid:" + i.ToString(); mDataTable.Rows.Add(linha); } return mDataTable; } private void GeraGrid(DataTable mDataTable) { grdDocSelecionado.DataSource = mDataTable; grdDocSelecionado.DataBind(); } protected void btnCopiar_Click(object sender, EventArgs e) { DataTable dt = this.AdicionaColunasDataTable(); DataRow linha = null; foreach (GridViewRow item in grdDocSelecionado.Rows) { if (((CheckBox)item.FindControl("chkChecado")).Checked == true) { linha = dt.NewRow(); linha["DADOS"] = ((Label)item.Cells[1].FindControl("lblDados")).Text.Trim(); linha["DOC_ID"] = ((Label)item.Cells[2].FindControl("lblItemIndex")).Text.Trim(); dt.Rows.Add(linha); } } divGrid2.Visible = true; grdGrid2.DataSource = dt; grdGrid2.DataBind(); } private DataTable AdicionaColunasDataTable() { DataTable mDataTable = new DataTable(); mDataTable.Columns.Add(new DataColumn("DOC_ID")); mDataTable.Columns.Add(new DataColumn("DADOS")); return mDataTable; }
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form runat="server"> <div> <asp:GridView ID="grdDocSelecionado" runat="server" AutoGenerateColumns="False" Width="40%" PageSize="20" DataKeyNames="DOC_ID" ToolTip="Selecione os documentos recebidos"> <Columns> <asp:TemplateField ItemStyle-Width="5%"> <ItemTemplate> <asp:CheckBox ID="chkChecado" runat="server" /> </ItemTemplate> <ItemStyle HorizontalAlign="Center" /> </asp:TemplateField> <asp:TemplateField Visible="false" ItemStyle-Width="15%" HeaderText="Código Item Listado"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <ItemTemplate> <asp:Label ID="lblDocId" runat="server" Text='<%#Eval("DOC_ID")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField Visible="true" ItemStyle-Width="15%" HeaderText="Dados do Item"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <ItemTemplate> <asp:Label ID="lblDados" runat="server" Text='<%#Eval("DADOS")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField Visible="true" ItemStyle-Width="15%" HeaderText="Data Item Index"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <ItemTemplate> <asp:Label ID="lblItemIndex" runat="server" Text='<%#Container.DataItemIndex%>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> <div> <asp:Button ID="btnCopiar" runat="server" OnClick="btnCopiar_Click" Width="150px" Text="Copiar" /> </div> <div visible="false" id="divGrid2" runat="server"> <asp:GridView ID="grdGrid2" runat="server" AutoGenerateColumns="False" Width="40%" PageSize="20" DataKeyNames="DOC_ID" ToolTip="Selecione os documentos recebidos"> <Columns> <asp:TemplateField Visible="false" ItemStyle-Width="15%" HeaderText="Código Item Listado"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <ItemTemplate> <asp:Label ID="lblTeste1" runat="server" Text='<%#Eval("DOC_ID")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField Visible="true" ItemStyle-Width="15%" HeaderText="Dados do Item"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <ItemTemplate> <asp:Label ID="lblTeste" runat="server" Text='<%#Eval("DADOS")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html>
Efetuei o click no botão copiar e os itens selecionados foram copiados para a lista de baixo Marcos.
Creio que o seu erro é o FindControl(""). Tente adicionar ele nessa linha
DataRow[] dr = dt.Select("DOC_ID = '" + ((Label)grdBuscaDoc.Rows[i].Cells[1].FindControl("lblID")).Text.Trim() + "'");
Espero que agora resolva o seu problema cara.
Abraço, Good Luck.
-
Fala Marcos, cara eu só vi agora.
Você está recuperando o valor das colunas errado cara. Como são ItemTemplates você deve utilizando o FindControl para todas as Labels.
Segue o código.
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.GeraGrid(this.CriarDataTable()); } } protected void chkTeste_CheckedChanged(object sender, EventArgs e) { this.GeraGrid(this.CriarDataTable()); } private DataTable CriarDataTable() { DataTable mDataTable = new DataTable(); //mDataTable.Columns.Add("DOC_ID"); //mDataTable.Columns.Add("DADOS"); ////criando as colunas mDataTable.Columns.Add(new DataColumn("DOC_ID")); mDataTable.Columns.Add(new DataColumn("DADOS")); DataRow linha; for (int i = 0; i < 10; i++) { linha = mDataTable.NewRow(); //gera o n£mero GUID linha["DOC_ID"] = i.ToString(); linha["DADOS"] = "Teste Fernando Carregamento Grid:" + i.ToString(); mDataTable.Rows.Add(linha); } return mDataTable; } private void GeraGrid(DataTable mDataTable) { grdDocSelecionado.DataSource = mDataTable; grdDocSelecionado.DataBind(); } protected void btnCopiar_Click(object sender, EventArgs e) { DataTable dt = this.AdicionaColunasDataTable(); DataRow linha = null; foreach (GridViewRow item in grdDocSelecionado.Rows) { if (((CheckBox)item.FindControl("chkChecado")).Checked == true) { linha = dt.NewRow(); linha["DADOS"] = ((Label)item.Cells[1].FindControl("lblDados")).Text.Trim(); linha["DOC_ID"] = ((Label)item.Cells[2].FindControl("lblItemIndex")).Text.Trim(); dt.Rows.Add(linha); } } divGrid2.Visible = true; grdGrid2.DataSource = dt; grdGrid2.DataBind(); } private DataTable AdicionaColunasDataTable() { DataTable mDataTable = new DataTable(); mDataTable.Columns.Add(new DataColumn("DOC_ID")); mDataTable.Columns.Add(new DataColumn("DADOS")); return mDataTable; }
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form runat="server"> <div> <asp:GridView ID="grdDocSelecionado" runat="server" AutoGenerateColumns="False" Width="40%" PageSize="20" DataKeyNames="DOC_ID" ToolTip="Selecione os documentos recebidos"> <Columns> <asp:TemplateField ItemStyle-Width="5%"> <ItemTemplate> <asp:CheckBox ID="chkChecado" runat="server" /> </ItemTemplate> <ItemStyle HorizontalAlign="Center" /> </asp:TemplateField> <asp:TemplateField Visible="false" ItemStyle-Width="15%" HeaderText="Código Item Listado"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <ItemTemplate> <asp:Label ID="lblDocId" runat="server" Text='<%#Eval("DOC_ID")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField Visible="true" ItemStyle-Width="15%" HeaderText="Dados do Item"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <ItemTemplate> <asp:Label ID="lblDados" runat="server" Text='<%#Eval("DADOS")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField Visible="true" ItemStyle-Width="15%" HeaderText="Data Item Index"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <ItemTemplate> <asp:Label ID="lblItemIndex" runat="server" Text='<%#Container.DataItemIndex%>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> <div> <asp:Button ID="btnCopiar" runat="server" OnClick="btnCopiar_Click" Width="150px" Text="Copiar" /> </div> <div visible="false" id="divGrid2" runat="server"> <asp:GridView ID="grdGrid2" runat="server" AutoGenerateColumns="False" Width="40%" PageSize="20" DataKeyNames="DOC_ID" ToolTip="Selecione os documentos recebidos"> <Columns> <asp:TemplateField Visible="false" ItemStyle-Width="15%" HeaderText="Código Item Listado"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <ItemTemplate> <asp:Label ID="lblTeste1" runat="server" Text='<%#Eval("DOC_ID")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField Visible="true" ItemStyle-Width="15%" HeaderText="Dados do Item"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <ItemTemplate> <asp:Label ID="lblTeste" runat="server" Text='<%#Eval("DADOS")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html>
Efetuei o click no botão copiar e os itens selecionados foram copiados para a lista de baixo Marcos.
Creio que o seu erro é o FindControl(""). Tente adicionar ele nessa linha
DataRow[] dr = dt.Select("DOC_ID = '" + ((Label)grdBuscaDoc.Rows[i].Cells[1].FindControl("lblID")).Text.Trim() + "'");
Espero que agora resolva o seu problema cara.
Abraço, Good Luck.
Fala Fernando, testei com esses códigos que você me passou, mas ainda assim nada...
com este código aqui está quase lá. Eu consigo criar o segundo Grid com a quantidade de linhas selecionadas e colunas e tal, mas ainda faltam os dado, o grid vem vazio, apenas com as linhas e colunas.
segue o código C#protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { numDTL = txtNum_DTLEC.Text; numDoc = txtNumDoc.Text; this.atualizaGrid(numDTL, numDoc); dt = new DataTable(); CreateDataTable(); } else { dt = (DataTable)ViewState["DataTable"]; } ViewState["DataTable"] = dt; } private void atualizaGrid(string numDtl, string numDoc) { numDTL = txtNum_DTLEC.Text; numDoc = txtNumDoc.Text; var bll_edtlec = new BLLDtl(); var cec = bll_edtlec.ListarDocsIsoSup(numDtl, numDoc); grdBuscaDoc.Visible = true; grdBuscaDoc.DataSource = cec; grdBuscaDoc.DataBind(); } #region Métodos private void PaginarGridDocs(string numDoc, string numDTL) { numDTL = txtNum_DTLEC.Text; numDoc = txtNumDoc.Text; var bll_edtlec = new BLLDtl(); var cec = bll_edtlec.ListarDocsIsoSup(numDoc, numDTL); grdBuscaDoc.DataSource = cec; grdBuscaDoc.DataBind(); } #endregion protected void btnPesq_Click(object sender, EventArgs e) { numDTL = txtNum_DTLEC.Text; numDoc = txtNumDoc.Text; atualizaGrid(numDTL, numDoc); } protected void btnLimpar_Click(object sender, EventArgs e) { } protected void btnPesqIncluir_Click(object sender, EventArgs e) { AddToDataTable(); BindGrid(); for (int i = 0; i < grdBuscaDoc.Rows.Count; i++) { CheckBox chkDocs = (CheckBox)grdBuscaDoc.Rows[i].Cells[0].FindControl("chkDocs"); if (((CheckBox)grdBuscaDoc.Rows[i].Cells[0].FindControl("chkDocs")).Checked == true) { chkDocs.Checked = false; } } } protected void btnPesqExcluir_Click(object sender, EventArgs e) { } protected void chkDocOnCheckedChanged(object sender, EventArgs e) { } protected void chkAllOnCheckedChanged(object sender, EventArgs e) { } private DataTable CreateDataTable() { dt.Columns.Add("DOC_ID"); dt.Columns.Add("TD"); dt.Columns.Add("BC"); dt.Columns.Add("OS1_FUNCT"); dt.Columns.Add("NUM_DTL"); dt.Columns.Add("DESIGNATION"); dt.Columns.Add("DOCUMENT_NO"); dt.Columns.Add("REVISAO"); dt.Columns.Add("REV_DATE"); dt.Columns.Add("QUANT_DOC"); return dt; } private void AddToDataTable() { for (int i = 0; i < grdBuscaDoc.Rows.Count; i++) { CheckBox chkDocs = (CheckBox)grdBuscaDoc.Rows[i].Cells[0].FindControl("chkDocs"); if (((CheckBox)grdBuscaDoc.Rows[i].Cells[0].FindControl("chkDocs")).Checked == true) { DataRow dr = dt.NewRow(); dr["DOC_ID"] = grdBuscaDoc.Rows[i].Cells[1].Text.Trim(); dr["TD"] = grdBuscaDoc.Rows[i].Cells[2].Text.Trim(); dr["BC"] = grdBuscaDoc.Rows[i].Cells[3].Text.Trim(); dr["OS1_FUNCT"] = grdBuscaDoc.Rows[i].Cells[4].Text.Trim(); dr["NUM_DTL"] = grdBuscaDoc.Rows[i].Cells[5].Text.Trim(); dr["DESIGNATION"] = grdBuscaDoc.Rows[i].Cells[6].Text.Trim(); dr["DOCUMENT_NO"] = grdBuscaDoc.Rows[i].Cells[7].Text.Trim(); dr["REVISAO"] = grdBuscaDoc.Rows[i].Cells[8].Text.Trim(); dr["REV_DATE"] = grdBuscaDoc.Rows[i].Cells[9].Text.Trim(); dr["QUANT_DOC"] = grdBuscaDoc.Rows[i].Cells[10].Text.Trim(); dt.Rows.Add(dr); } } } private void BindGrid() { grdDocSelecionado.DataSource = dt; grdDocSelecionado.DataBind(); } } }
Segue o Aspx, ainda sem o AccessKey, não sei porque ele não tá aceitando o AccessKey cara, parece que tá de sacanagem com a minha cara...
<%@ Page Title="" Language="C#" MasterPageFile="~/fup_servicos/fup_servicos.master" AutoEventWireup="true" CodeBehind="incluir_dtlec.aspx.cs" Inherits="SisGem.WEB.fup_servicos.recebimento_doc.incluir_dtlec" %> <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> <asp:Content ID="SisGemScripts" ContentPlaceHolderID="head" runat="server"> <script src="../../scripts/Funcoes.js" type="text/javascript"></script> <script type="text/javascript" language="javascript"> $("[id*=chkAll]").live("click", function () { var chkAll = $(this); var grid = $(this).closest("table"); $("input[type=checkbox]", grid).each(function () { if (chkAll.is(":checked")) { $(this).attr("checked", "checked"); $("td", $(this).closest("tr")).addClass("selected"); } else { $(this).removeAttr("checked"); $("td", $(this).closest("tr")).removeClass("selected"); } }); }); $("[id*=chkDocs]").live("click", function () { var grid = $(this).closest("table"); var chkAll = $("[id*=chkAll]", grid); if (!$(this).is(":checked")) { $("td", $(this).closest("tr")).removeClass("selected"); chkAll.removeAttr("checked"); } else { $("td", $(this).closest("tr")).addClass("selected"); if ($("[id*=chkDocs]", grid).length == $("[id*=chkDocs]:checked", grid).length) { chkHeader.attr("checked", "checked"); } } }); </script> <style type="text/css"> .style2 { width: 72px; } .style3 { width: 86px; } .style6 { width: 127px; } .Botao { } .style7 { width: 66px; } .style8 { width: 20px; } .style9 { width: 19px; } .style10 { width: 90px; } .selected { background-color: #A1DCF2; } </style> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <!-- inicio #formulario --> <asp:UpdatePanel runat="server" ID="upFiltro" UpdateMode="Conditional"> <ContentTemplate> <asp:Panel ID="pnlFiltro" runat="server" Visible="true"> <div class="TituloPagina"> <asp:Label ID="lblTitulo" runat="server" Text="Enviar e-DTL-EC"></asp:Label> </div> <div id="FiltroBusca"> <table id="tbFiltroBusca" border="1" width="100%"> <tr> <td> <asp:LinkButton runat="server" ID="lnkfake"></asp:LinkButton> </td> </tr> <tr> <td width="100%"> <table id="Table2" border="1" width="100%" align="center"> <tr> <td align="left"> <table width="100%" cellpadding="1" cellspacing="1" style="height: 17px"> <table border="0"> <tr> <td class="style7"> <asp:Label ID="lblNum_DTLEC" runat="server" CssClass="campos">N° DTL-EC:</asp:Label> </td> <td> <asp:TextBox ID="txtNum_DTLEC" runat="server" CssClass="CaixaTexto" MaxLength="30" ValidationGroup="MKE" Width="92px"></asp:TextBox> </td> <td class="style10"> <asp:Label ID="lblNumDoc" runat="server" CssClass="campos">N° Documento:</asp:Label> </td> <td> <asp:TextBox ID="txtNumDoc" runat="server" CssClass="CaixaTexto" MaxLength="30" ValidationGroup="MKE" Width="92px"></asp:TextBox> </td> <td class="style3"> <asp:Label ID="lblDTLEC_DATA_ENVIO" runat="server" CssClass="campos">Data de envio:</asp:Label> </td> <td class="style2"> <asp:TextBox ID="txtSOLIC_DATA_INCLUSAO" runat="server" CssClass="CaixaTexto" MaxLength="8" Style="text-align: justify" ValidationGroup="MKE" Width="70px"></asp:TextBox> <td class="style8"> <asp:ImageButton ID="imgCal" runat="server" CausesValidation="False" ImageUrl="~/images/Calendar_scheduleHS.png" /> </td> <asp:MaskedEditExtender ID="mskexDeliv" runat="server" AcceptNegative="Left" DisplayMoney="Left" ErrorTooltipEnabled="True" Mask="99/99/9999" MaskType="Date" MessageValidatorTip="true" OnFocusCssClass="MaskedEditFocus" OnInvalidCssClass="MaskedEditError" TargetControlID="txtSOLIC_DATA_INCLUSAO"> </asp:MaskedEditExtender> <asp:MaskedEditValidator ID="mevDeliv" runat="server" ControlExtender="mskexDeliv" ControlToValidate="txtSOLIC_DATA_INCLUSAO" Display="Dynamic" EmptyValueBlurredText="*" InvalidValueBlurredMessage="*" InvalidValueMessage="Data inválida" Style="color: Red; display: none;" ValidationGroup="MKE"></asp:MaskedEditValidator> <asp:CalendarExtender ID="calendarDELIV" runat="server" PopupButtonID="imgCal" TargetControlID="txtSOLIC_DATA_INCLUSAO"> </asp:CalendarExtender> </td> <td class="style6"> <asp:Label ID="lblDATA_RECEBIMENTO" runat="server" CssClass="campos">Data de recebimento:</asp:Label> </td> <td> <asp:TextBox ID="txtSOLIC_DATA_CONCLUSAO" runat="server" CssClass="CaixaTexto" MaxLength="8" Style="text-align: justify" ValidationGroup="MKE2" Width="70px"></asp:TextBox> <td class="style9"> <asp:ImageButton ID="imgCal2" runat="server" CausesValidation="False" ImageUrl="~/images/Calendar_scheduleHS.png" /> </td> <asp:MaskedEditExtender ID="mskexDeliv2" runat="server" AcceptNegative="Left" DisplayMoney="Left" ErrorTooltipEnabled="True" Mask="99/99/9999" MaskType="Date" MessageValidatorTip="true" OnFocusCssClass="MaskedEditFocus" OnInvalidCssClass="MaskedEditError" TargetControlID="txtSOLIC_DATA_CONCLUSAO"> </asp:MaskedEditExtender> <asp:MaskedEditValidator ID="mevDeliv2" runat="server" ControlExtender="mskexDeliv2" ControlToValidate="txtSOLIC_DATA_CONCLUSAO" Display="Dynamic" EmptyValueBlurredText="*" InvalidValueBlurredMessage="*" InvalidValueMessage="Data inválida" Style="color: Red; display: none;" ValidationGroup="MKE2"></asp:MaskedEditValidator> <asp:CalendarExtender ID="calendarDELIV2" runat="server" PopupButtonID="imgCal2" TargetControlID="txtSOLIC_DATA_CONCLUSAO"> </asp:CalendarExtender> </td> </tr> </table> </td> <tr> <td align="left" valign="middle" rowspan="2"> <asp:Button CssClass="Botao" ID="btnPesq" runat="server" TabIndex="2" Text="Pesquisar" OnClick="btnPesq_Click"></asp:Button> <asp:Button CssClass="Botao" ID="btnLimpar" runat="server" TabIndex="2" Text="Limpar" OnClick="btnLimpar_Click" ToolTip="Limpar campos de filtro"></asp:Button> </td> </tr> </tr> </table> </tr> </table> </td> </tr> <tr> <td> <!-- inicio #Panel Grid de Consulta --> <table width="100%" align="center" id="Table1"> <tr> <td> <table id="Table3" width="100%" border="1" align="center" bgcolor="whitesmoke"> <tr> <asp:GridView ID="grdBuscaDoc" runat="server" AutoGenerateColumns="False" Width="100%" PageSize="20" DataKeyNames="DOC_ID" ToolTip="Selecione os documentos recebidos"> <Columns> <asp:TemplateField> <HeaderTemplate> Documentos Recebidos <br /> <asp:CheckBox ID="chkAll" runat="server" onclick="checkAll(this);" AutoPostBack="true" /> </HeaderTemplate> <ItemTemplate> <asp:CheckBox ID="chkDocs" runat="server" OnCheckedChanged="chkDocOnCheckedChanged" AutoPostBack="true" /> </ItemTemplate> <ItemStyle HorizontalAlign="Center" /> </asp:TemplateField> <asp:TemplateField SortExpression="DOC_ID"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> DOC_ID </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblDOC" runat="server" Text='<%#Eval("DOC_ID")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField SortExpression="TD"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> TD </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblTD" runat="server" Text='<%#Eval("TD")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField SortExpression="BC"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Assunto </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblAssunto" runat="server" Text='<%#Eval("BC")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField SortExpression="OS1_FUNCT"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" Width="80px" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Estrutura </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblFuncao" runat="server" Text='<%#Eval("OS1_FUNCT")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField SortExpression="NUM_DTL"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> DTL </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblNumDTL" runat="server" Text='<%#Eval("NUM_DTL")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField SortExpression="DESIGNATION"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Descrição </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblDescricao" runat="server" Text='<%#Eval("DESIGNATION")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField SortExpression="DOCUMENT_NO"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Número Documento </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblDatReceb" runat="server" Text='<%#Eval("DOCUMENT_NO")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField SortExpression="REVISAO"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Revisão </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblRevisao" runat="server" Text='<%#Eval("REVISAO")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField Visible="false" SortExpression="REV_DATE"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Data Revisão </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblRevDate" runat="server" Text='<%#Eval("REV_DATE")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField SortExpression="QUANT_DOC"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Quantidade Documentos </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblQntDocs" runat="server" Text='<%#Eval("QUANT_DOC")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField Visible="true" ItemStyle-Width="15%" HeaderText="Data Item Index"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <ItemTemplate> <asp:Label ID="lblItemIndex" runat="server" Text='<%#Container.DataItemIndex%>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> <AlternatingRowStyle BackColor="whitesmoke" /> <FooterStyle BackColor="#CCCCCC" ForeColor="Black" /> <HeaderStyle BackColor="#003F86" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#003F86" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="White" ForeColor="Black" /> <SortedAscendingCellStyle BackColor="#F1F1F1" /> <SortedAscendingHeaderStyle BackColor="#0000A9" /> <SortedDescendingCellStyle BackColor="#CAC9C9" /> <SortedDescendingHeaderStyle BackColor="#000065" /> <EmptyDataTemplate> Não existe elemento para associar ao grupo. </EmptyDataTemplate> <SortedAscendingCellStyle BackColor="#F1F1F1" /> <SortedAscendingHeaderStyle BackColor="#0000A9" /> <SortedDescendingCellStyle BackColor="#CAC9C9" /> <SortedDescendingHeaderStyle BackColor="#000065" /> </asp:GridView> </tr> </table> </td> </tr> </table> <!-- fim #Panel Grid de Volumes --> </td> </tr> <%-- Botoes --%> <tr> <td style="padding: 10px 10px 10px 10px;" bgcolor="#248CC0"> <asp:Button ID="btnPesqIncluir" runat="server" CssClass="Botao" Text="Gerar eDTL-EC - CEC" OnClick="btnPesqIncluir_Click" Width="136px" /> </td> </tr> </table> <tr> <td> </td> </tr> <tr> <td> <asp:GridView ID="grdDocSelecionado" runat="server" AutoGenerateColumns="False" Width="100%" PageSize="20" DataKeyNames="DOC_ID" ToolTip="Selecione os documentos recebidos"> <Columns> <asp:TemplateField> <HeaderTemplate> Documentos Recebidos <br /> <asp:CheckBox ID="chkAll" runat="server" AutoPostBack="true" /> </HeaderTemplate> <ItemTemplate> <asp:CheckBox ID="chkDocs" runat="server" OnCheckedChanged="chkDocOnCheckedChanged" AutoPostBack="true" /> </ItemTemplate> <ItemStyle HorizontalAlign="Center" /> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> ID </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblDOC" runat="server" Text='<%#Eval("DOC_ID")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> TD </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblTD" runat="server" Text='<%#Eval("TD")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Assunto </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblAssunto" runat="server" Text='<%#Eval("BC")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" Width="80px" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Estrutura </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblFuncao" runat="server" Text='<%#Eval("OS1_FUNCT")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> DTL </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblNumDTL" runat="server" Text='<%#Eval("NUM_DTL")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Descrição </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblDescricao" runat="server" Text='<%#Eval("DESIGNATION")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Número Documento </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblDatReceb" runat="server" Text='<%#Eval("DOCUMENT_NO")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Revisão </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblLoginReceb" runat="server" Text='<%#Eval("REVISAO")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField Visible="false"> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Data Revisão </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblDocStatus" runat="server" Text='<%#Eval("REV_DATE")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <HeaderStyle Font-Bold="true" HorizontalAlign="center" /> <ItemStyle HorizontalAlign="center" /> <HeaderTemplate> Quantidade Documentos </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblStatusDTLEC" runat="server" Text='<%#Eval("QUANT_DOC")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> <AlternatingRowStyle BackColor="whitesmoke" /> <FooterStyle BackColor="#CCCCCC" ForeColor="Black" /> <HeaderStyle BackColor="#003F86" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#003F86" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="White" ForeColor="Black" /> <SortedAscendingCellStyle BackColor="#F1F1F1" /> <SortedAscendingHeaderStyle BackColor="#0000A9" /> <SortedDescendingCellStyle BackColor="#CAC9C9" /> <SortedDescendingHeaderStyle BackColor="#000065" /> <EmptyDataTemplate> Não existe elemento para associar ao grupo. </EmptyDataTemplate> <SortedAscendingCellStyle BackColor="#F1F1F1" /> <SortedAscendingHeaderStyle BackColor="#0000A9" /> <SortedDescendingCellStyle BackColor="#CAC9C9" /> <SortedDescendingHeaderStyle BackColor="#000065" /> </asp:GridView> </td> </tr> </div> </asp:Panel> <!-- fim #formulario --> </ContentTemplate> </asp:UpdatePanel> </asp:Content>
ta quase chegando lá, ta faltando pouco, só falta mesmo é trazer os dados... Se tiver mais alguma coisa em que você possa me ajudar aí...v
Desde já agradeço a moral que você tem dado... Vlw msm
Abraço...
Marcos Paulo - Analista de Sistemas
-
Marcos, como falei anteriormente falta o FindControl nesse carinha aqui:
if (((CheckBox)grdBuscaDoc.Rows[i].Cells[0].FindControl("chkDocs")).Checked == true) { DataRow dr = dt.NewRow(); dr["DOC_ID"] = ((Label)grdBuscaDoc.Rows[i].Cells[1].FindControl("")).Text.Trim(); dr["TD"] = grdBuscaDoc.Rows[i].Cells[2].Text.Trim(); dr["BC"] = grdBuscaDoc.Rows[i].Cells[3].Text.Trim(); dr["OS1_FUNCT"] = grdBuscaDoc.Rows[i].Cells[4].Text.Trim(); dr["NUM_DTL"] = grdBuscaDoc.Rows[i].Cells[5].Text.Trim(); dr["DESIGNATION"] = grdBuscaDoc.Rows[i].Cells[6].Text.Trim(); dr["DOCUMENT_NO"] = grdBuscaDoc.Rows[i].Cells[7].Text.Trim(); dr["REVISAO"] = grdBuscaDoc.Rows[i].Cells[8].Text.Trim(); dr["REV_DATE"] = grdBuscaDoc.Rows[i].Cells[9].Text.Trim(); dr["QUANT_DOC"] = grdBuscaDoc.Rows[i].Cells[10].Text.Trim(); dt.Rows.Add(dr); }
Eu inclui no primeiro item.
Pra você ter a ideia do esquema.
Se você debugar vai ver que ele estes itens da linha selecionada vão estar sem valor algum.
Vai na fé malandro que agora vai funfa. hehehehe..
Abraço.
- Marcado como Resposta Marcos Paulo P.M sexta-feira, 13 de setembro de 2013 10:40
-
Marcos, como falei anteriormente falta o FindControl nesse carinha aqui:
if (((CheckBox)grdBuscaDoc.Rows[i].Cells[0].FindControl("chkDocs")).Checked == true) { DataRow dr = dt.NewRow(); dr["DOC_ID"] = ((Label)grdBuscaDoc.Rows[i].Cells[1].FindControl("")).Text.Trim(); dr["TD"] = grdBuscaDoc.Rows[i].Cells[2].Text.Trim(); dr["BC"] = grdBuscaDoc.Rows[i].Cells[3].Text.Trim(); dr["OS1_FUNCT"] = grdBuscaDoc.Rows[i].Cells[4].Text.Trim(); dr["NUM_DTL"] = grdBuscaDoc.Rows[i].Cells[5].Text.Trim(); dr["DESIGNATION"] = grdBuscaDoc.Rows[i].Cells[6].Text.Trim(); dr["DOCUMENT_NO"] = grdBuscaDoc.Rows[i].Cells[7].Text.Trim(); dr["REVISAO"] = grdBuscaDoc.Rows[i].Cells[8].Text.Trim(); dr["REV_DATE"] = grdBuscaDoc.Rows[i].Cells[9].Text.Trim(); dr["QUANT_DOC"] = grdBuscaDoc.Rows[i].Cells[10].Text.Trim(); dt.Rows.Add(dr); }
Eu inclui no primeiro item.
Pra você ter a ideia do esquema.
Se você debugar vai ver que ele estes itens da linha selecionada vão estar sem valor algum.
Vai na fé malandro que agora vai funfa. hehehehe..
Abraço.
VLLWWWW Fernandoooo! era só utilizar a lable msm cara, vlw pela dica, ta guardado, só pra aproveitar que vc ta com a mão na massa, como faço pra deleter só do Grid, botei um botão para excluir, quero excluir diretamente a linha, não precisa percorrer o grid para encontrar os selecionados, no momento q ele clica no botão, a linha é excluída. Alguma dica, só pra fechar o assunto de vez??
Abraçoo e mais uma vez muito obrigadoo pela força!!
Marcos Paulo - Analista de Sistemas
-
Que isso cara, bom saber que seu problema foi resolvido.
Cara, a Grid tem um evento chamado RowDeleting que você não precisa nem de Botão cara.
O seu botão está na linha ou fora?
Se ele estiver fora da grid sem que você selecione algum item não dá tá.
Vou te passar alguns links cara sobre o RowDeliting, que funciona assim que você clica na linha da grid.
http://stackoverflow.com/questions/7226548/how-to-delete-row-in-gridview-using-rowdeleting-event
http://forums.asp.net/t/1648625.aspx
http://www.codeproject.com/Questions/252190/Row-Deleting-event-in-gridview-control
http://www.aspsnippets.com/Articles/ASPNet-GridView---Delete-Row-with-Confirmation.aspx
Cara com isso acho que você já vai conseguir o resultado que espera.
Caso queira utilizar os checkBoxes faça assim: Guarde seu DataTable na ViewState, Percorra a lista, recupere o item selecionado, com esse item selecionado você remove o item desse DataTable e efetua o bind com a ViewState.
Espero ajudar novamente.
Abraço, Good Luck.
-
-