Jump to content
Sign in to follow this  
Bastos

[C# asp.net] Criar paginaçao numa datagrid lendo um xml

Recommended Posts

Bastos

Boas!!

Estou a utilizar VS2003.NET, C# asp

o q se passa é o seguinte:

carrego um file XML para uma datagrid, e keria implementar a paginação, mas n está a funcionar, n muda de página :s

já fui ao property building da datagrid activar a paginaçao e inseri este codigo:

private void dtgrdPost_PageIndexChanged(object source, system.Web.UI.WebControls.DataGridPageChangedEventArgs e)
	{
		dtgrdPost.CurrentPageIndex = e.NewPageIndex;
		dtgrdPost.Visible = true;
		func_bd(); 'funcao q carrega o xml pra um dataset
                                                                //dtgrdPost.DataBind();
	}

já pesquisei mas encontrei sempre a mesma resposta, que era a q estou a utilizar, se alguem puder ajudar agredecia!!

edit: alterado nome do topico!

P.S.: Todas as sugestoes sao bem-vindas!! :P

Share this post


Link to post
Share on other sites
Bastos

Boas!

entao onde estao os experts?? ng dá um tiro no escuro??

ninguém tem uma opinião??? please help!!

todas as opinioes sao bem-vindas!!

ou será q só alguns posts eke são respondidos?!?!?!? :cheesygrin:

fikem...

Share this post


Link to post
Share on other sites
deathseeker25

Boas!

entao onde estao os experts?? ng dá um tiro no escuro??

ninguém tem uma opinião??? please help!!

todas as opinioes sao bem-vindas!!

ou será q só alguns posts eke são respondidos?!?!?!? :cheesygrin:

fikem...

Boas,

Em primeiro lugar, bem-vindo ao forum. Em segundo lugar, devo dizer que aqui tratamos todos por igual dependendo do conhecimento que temos. Se ainda ninguem respondeu á questão é porque realmente ninguem que a tenha lido tem capacidade para a resolver.

O melhor será esperar mais um pouco, que tenho a certeza que obterás uma boa resposta nos próximos dias. ;)

Share this post


Link to post
Share on other sites
Bastos

Bom, já stou mais descansado, por momentos ate pensei q a minha msg estivesse de alguma forma invisivel, visto q n obtinha nenhum feedback da vossa parte. mto agradecido, pelo menos sei q alguem leu as msg :cheesygrin:

desculpem o stress, mas é deseperante kando n se obtem resposta... nenhum tipo d resposta entao :s

fikem bem... e mais uma vez obrigado deathseeker25 pelo feedback...

Share this post


Link to post
Share on other sites
max

quer-me parecer que tens de fazer as coisas manualmente...

Ou seja, não te basta escreveres "func_bd()" sempre que se muda a pagina no datagrid.

Não escreveste aqui a tua função "func_bd()" e talvez fosse util.

Nessa função tens de filtrar os resultados para a página certa, e só depois fazes o databind. Senão ele está-te sempre a mostrar a primeira página...

Deves ter de usar algo tipo:

  private void DataGrid1_PageIndexChanged(object source,    System.Web.UI.WebControls.DataGridPageChangedEventArgs e)

   {

     // user clicks forward or back, just call BindGrid with the NewPageIndex:

     func_bd(this.curPageSize , e.NewPageIndex);

   }

}

}

Dá uma espreitadela em http://www.eggheadcafe.com/articles/20060109.asp

Share this post


Link to post
Share on other sites
Bastos

Boas,

pois o problema eke em todas as paginas tem SQL, e em sql eu sei q dá, tal como tenho em cima, nem é necessário colocar e.newpageindex, agora com XML... eke está dificil.

a funçao func_bd() apenas carrega o dataset e a datagrid, mas vou coloca-la...

private void func_bd()
{
//carrega o DS pra DataGrid
		DataSet dsFinal = new DataSet();
		dsFinal.ReadXmlSchema(Request.PhysicalApplicationPath + "bd/XML.xsd");
		dsFinal.ReadXml(Request.PhysicalApplicationPath + "bd/temp/XMLTemp" + Session.SessionID + ".xml");
		XmlDataDocument xmlData = new XmlDataDocument(dsFinal);
		dtgrdPost.DataSource = dsFinal;
		dtgrdPost.DataBind();
}

como ves, é o mais basico, tb já tentei colocar o codigo directamente no evento load(), mas sem sucesso.

mas de kalker maneira vou fazer mais uns testes com o codigo em cima :(

obrigado max

vou postando pra vos manter informados...

Share this post


Link to post
Share on other sites
senito

Boas, eu neste momento não te consigo dizer como se faz isso, pq tou no trabalho e n me dá mto jeito tar a escrever sobre isso.

Mal possa tento ajudar-te.

Mas se quiseres fazer isso mais rápido muda pro VS 2005. Já faz isso automaticamente (pelo q me lembro).

Cumps

Share this post


Link to post
Share on other sites
Bastos

Boas, eu neste momento não te consigo dizer como se faz isso, pq tou no trabalho e n me dá mto jeito tar a escrever sobre isso.

Mal possa tento ajudar-te.

Mas se quiseres fazer isso mais rápido muda pro VS 2005. Já faz isso automaticamente (pelo q me lembro).

Cumps

pois o vs2003, tb tem a msma opção e funciona, mas em sql :s

pq com xml n consigo por isto a funcionar... :(

Share this post


Link to post
Share on other sites
max

é isso que eu acho estranho ser diferente do sql, para o xml...

porque ambos alojam dados! e a metodologia é sempre a mesma.

Faz-se um novo dataset... faz-se a leitura da base de dados ou do xml, depois faz-se fill ao dataset, e por ultimo faz-se o bind do datagrid.

Não percebo mm o que possa ser diferente entre as um dataset oriundo de sql e de um xml

Share this post


Link to post
Share on other sites
max

Mas espera, lá está... alguma coisa tem de estar mal.

Da maneira que estás a fazer isso, quando algo muda a página, ele recebe a ordem para "dtgrdPost.CurrentPageIndex = e.NewPageIndex;" e depois disso... fazes a função func_db()

Mas como essa função começa logo por fazer um dataset novo... imagina que o teu xml tem 50 items. E a tua datagrid tem a ordem de só mostrar 10 de cada vez.

Ele vai-te sempre publicar os primeiros 10 items... a não ser que lhe dês uma ordem em contrário!

algo do tipo:

func_db(3)

então se é a página 3, ele tem de ir buscar ao datagrid quantos items é que mostra por página. Se forem 10, então ele vai ler o xml a partir do item "21" até ao item "30".

E depois com esses 10 items, é que faz um dataset.

Tu tens mm de filtrar a leitura do xml, porque repara.

Imagina que o teu xml tinha 5 mil items. E o datagrid só mostra 10.

Já imaginaste o que seria sempre que mudavas de página, a tua função carregar um novo dataset com 5 mil items ?? lol

De certeza que tb dava, mas fica muito lento e isso n é maneira de programar...

Podes e deves, filtrar primeiro o teu xml, e só depois é que enches o teu dataset!

Share this post


Link to post
Share on other sites
Bastos

Boas!!!

consegui finalmente encontrar o problema q n me deixava ver o sol... looool

agradeço a todos, mas nao fazem ideia do q era, algo q pensei q o VS2003 fizesse de forma automatica, e até faz pra algumas coisas... looool, ja estou a divagar :D

pronto vou colocar a soluçao..

pra além do codigo q colokei no 1º post e da respectiva função, é necessário incializar o componente pra mudar de pagina:

private void InitializeComponent()
    {
        this.dtgrdPost.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.dtgrdPost_PageIndexChanged);}

pois é, apenas isto :s

max: tinha pensado da forma como disseste, mas dps lembrei-m q iria carregar mto... mas era a unica solução... :s thank's :D

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.