none
Verificar se gridview contem dados após solicitação de carregamento RRS feed

  • Pergunta

  • Olá pessoal,

    gostaria que me fosse esclarecida uma duvida. é que eu tenho um gridview na minha página, onde aparece resultado de uma procura feita. e pretendo é desabilitar um botao de inserção caso este gridview não retornar nenhum dado, e abilitar caso aparecer dados nele. mas o meu problema está no momento que devo verificar.

    criei um ciclo if dessa forma

    if (GridViewProcLinha.Rows.Count == 0)
            {
                //colocar codigos para desabilitar o botao
            }
            else
            {
                //colocar codigos para ativar o botao
            }

    só que não sei bem onde colocar este cógido. já tentei colocá-lo no evento page_load onde após um postback é verificado o estado do grid, só que entendi que ao ser efectuada um postback o estado anterior da pagina é guardada num viewstate e este é carregado após o evento. ou seja, caso o grid nao retornar nada, nao mostra, e apos uma nova procura onde tiver dados de retorno, ainda a grid estará desabilitada devido ao seu estado anterior que foi guardada. só se eu fizer de novo um refresh na página que será mostrada o botao abilitado....

    alguma ajuda como ultrapassar este problema, e caso estiver em erro poderiam me explicar melhor... agradeço....

     

    quinta-feira, 27 de junho de 2013 09:24

Respostas

  • Pelo que entendi é isso coloquei direto no botão ou seja no seu caso seria na textbox veja se te ajuda :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication3
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
               
    
                if (!IsPostBack)
                {
                   
                }
            }
    
            public class Grid
            {
                public string nome{get;set;}
                public int idade {get;set;}
            }
    
            public List<Grid>  GridDados()
            {
                List<Grid> lista = new List<Grid>();
                Grid grid = new Grid();
                Grid b = new Grid();
                grid.nome = "Teste";
                grid.idade = 20;
                b.nome = "AA";
                b.idade = 22;
    
                lista.Add(grid);
                lista.Add(b);
    
                return lista;
            }
    //aqui no evento do botão.....
            protected void Button1_Click(object sender, EventArgs e)
            {
                //aqui seria o click do seu botão
                //com o datasource do BD
                GridView1.DataSource = GridDados();
                GridView1.DataBind();
                int linha = GridView1.Rows.Count;
                TextBox1.Text = Convert.ToString(linha);
            }
        }
    }

    Se for uitl marque..Ou ao resolver finalize a thread para contribuir

    • Marcado como Resposta flaviodantas quinta-feira, 27 de junho de 2013 12:37
    quinta-feira, 27 de junho de 2013 12:29

Todas as Respostas

  • Coloque no seu metodo que você carrega sua grid, ou crie um metodo e chame ele ao acontecer um postback, ou seja a mesma coisa que você tem que fazer ao postback carregar sua grid.

    public int ContaLinhasGrid() {

    int linha = 0;

    linha = Grid.Rows.Count;

    return linha

    //e uma ideia nesse metodo voce compara onde quiser

    }


    Se for util marque..

    quinta-feira, 27 de junho de 2013 11:04
  • Daniel,

    ou através desse método, ou através do ciclo if feito depois do postback sempre acontece a mesma coisa. logo no primeiro postback a grid nao tinha nada, e cai na parte de nao encontrou nada, mesmo que este retorna algum dado. caso eu fizer o postback novamente agora sim el faz o que tem que ser feito caso encontrar...

    o postback guarda o estado anterior da pagina e volta a carregá-lo depois que for solicitado. e a grid para trabalhar corretamente tenho que fazer o carregamento da pagina 2 vezes..

    quinta-feira, 27 de junho de 2013 11:14
  • Poe isso

    if(!IsPostBack)

    {

    //seus metodos de carregamento de grid e if de linhas...

    }

    Se for util marque...

    quinta-feira, 27 de junho de 2013 11:16
  • Cara dessa forma que dizes nunca ele vai confirmar o grid que retorna valores. ele faz 1 unica vez antes de pagina ser postback

    eu tinha feito dessa forma

    if (Page.IsPostBack) {

    if (GridViewProcLinha.Rows.Count == 0)
                {
                    ImgBtnAdicionar.Visible = false;
                }
                else
                {
                    ImgBtnAdicionar.Visible = true;
                }

    }


    mas como disse para funcionar correctamente tenho de fazer o carregamento 2 vezes. é como se tem um atrazo. ou o estado anterior do grid é mostrado na minha solicitaçao. e nao quero isso. 

    quinta-feira, 27 de junho de 2013 11:30
  • Cara fiz um exemplo veja se te ajuda :

    namespace WebApplication3
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                GridView1.DataSource = GridDados();
                GridView1.DataBind();
    
                if (!IsPostBack)
                {
                    int linha = GridView1.Rows.Count;
                    TextBox1.Text = Convert.ToString(linha);
                }
            }
    
            public class Grid
            {
                public string nome{get;set;}
                public int idade {get;set;}
            }
    
            public List<Grid>  GridDados()
            {
                List<Grid> lista = new List<Grid>();
                Grid grid = new Grid();
                Grid b = new Grid();
                grid.nome = "Teste";
                grid.idade = 20;
                b.nome = "AA";
                b.idade = 22;
    
                lista.Add(grid);
                lista.Add(b);
    
                return lista;
            }
        }
    }

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication3.WebForm1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridView1" runat="server">
            </asp:GridView>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1"
                runat="server" Text="Button" />
        </div>
        </form>
    </body>
    </html>
    

    Veja se seria isso...

    Se for util marque..

    quinta-feira, 27 de junho de 2013 11:42
  • Cara obrigada pela ajuda,

    mas no meu caso é o seguinte: tenho um grid que tem uma data source nele associado. esta data source por sua vez é feita através de uma Stored procedure que faz um select na minha base de dados e retorna os valores econtrados. ele tem um parametro que é passado através de um campo textbox. 

    o principio do funcionamento é quando escrever no textobx faço enter ou clico no botao, os dados são carregados no gridview. 

    o que quero fazer é, caso a pesquisa retornar valores, é apresentado um botao. e caso não é retornado nada na pesquisa, este botão fica oculto na página.

    eu fiz a parte de verificar se a grid está vazia no postback. funciona mas não como preciso. porque ao ser carregado pela primeira vez a grid ainda não contem nada pq ainda não foi feita nenhuma pesquisa. caso eu procurar algo e a grid retornar valores, a função de pesquisa ainda não mostra o botão porque acho que no viewstate é carregado o estado anterior da grid, ou seja, quando ele não tinha nada. somente se eu clicar em enter novamente é que é apresentado o botão, ou seja, ele encontra algo na grid....

    como verificar isso sem ter que clicar em enter ou no botao 2 vezes na mesma procura para apresentar o resultado esperado??

    quinta-feira, 27 de junho de 2013 11:55
  • Pelo que entendi é isso coloquei direto no botão ou seja no seu caso seria na textbox veja se te ajuda :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication3
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
               
    
                if (!IsPostBack)
                {
                   
                }
            }
    
            public class Grid
            {
                public string nome{get;set;}
                public int idade {get;set;}
            }
    
            public List<Grid>  GridDados()
            {
                List<Grid> lista = new List<Grid>();
                Grid grid = new Grid();
                Grid b = new Grid();
                grid.nome = "Teste";
                grid.idade = 20;
                b.nome = "AA";
                b.idade = 22;
    
                lista.Add(grid);
                lista.Add(b);
    
                return lista;
            }
    //aqui no evento do botão.....
            protected void Button1_Click(object sender, EventArgs e)
            {
                //aqui seria o click do seu botão
                //com o datasource do BD
                GridView1.DataSource = GridDados();
                GridView1.DataBind();
                int linha = GridView1.Rows.Count;
                TextBox1.Text = Convert.ToString(linha);
            }
        }
    }

    Se for uitl marque..Ou ao resolver finalize a thread para contribuir

    • Marcado como Resposta flaviodantas quinta-feira, 27 de junho de 2013 12:37
    quinta-feira, 27 de junho de 2013 12:29
  • Daniel valeu mesmo pelo seu esforço. 

    cara a sua ajuda foi mesmo boa, entendi que tinha que colocar o codigo era na minha texbox e fazer a bind da grid e so depois procurar se aparece ou nao dados...

    obrigada cara

    quinta-feira, 27 de junho de 2013 12:37