Usuário com melhor resposta
Verificar se gridview contem dados após solicitação de carregamento

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