Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

MACkie

[SOLVED] Problema com métodos

Recommended Posts

MACkie

Houston, we have a problem!

Bem, o que se passa é o seguinte:

Eu tenho três métodos separados que, resumidamente, fazem o seguinte:

- proximaNoticia: mostra a noticia imediatamente a seguir na BD;

- anteriorNoticia: mostra a noticia imediatamente anterior;

- goTo: mostra a noticia com o número especificado.

Problema:

- o método proximaNoticia só funciona se quiser passar do numero 1 para o 2. Usei um incrementador (tipo selectedIndex++);

- o método anteriorNoticia, independentemente do número, passa sempre para a primeira noticia. Usei um decrementador (tipo selectedIndex--);

- o método goTo funciona como deve de ser.

Observações: o código dos três métodos é exactamente igual excepto o valor da variável: +1 para o primeiro, -1 para o segundo, user defined para o terceiro.

A acção é desencadeada ao clicar num botão.

Alguma possível solução?

Deixo aqui em "anexo" o método para passar para a seguinte.

protected void nextNews(object sender, EventArgs e)
    {
        
        if (selectedNews <= Convert.ToInt32(totalNews))
        {
            sqlconnect();
            this.selectedNews++;
            MySqlCommand nextCommand = new MySqlCommand("Select * from news where number = '" + selectedNews + "'", connection);
            MySqlDataReader reader = nextCommand.ExecuteReader();
            while (reader.Read())
            {
                newsArray[0] = (string)reader["title"].ToString();
                newsArray[1] = (string)reader["body"].ToString();
            }
            Label1.Text = newsArray[0].ToString();
            TextBox1.Text = selectedNews + " de " + totalNews;
            sqldisconnect();
        }
    }

Cumprimentos,

MACkie


private void doNotDisturb(string motive)if(motive.compareTo(somethingReallyImportant) == 0)pay attention;else//do nothing

Share this post


Link to post
Share on other sites
Hellblazer

qual e o numero de noticias que tens actualmente?


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
MACkie

Tenho cinco.


private void doNotDisturb(string motive)if(motive.compareTo(somethingReallyImportant) == 0)pay attention;else//do nothing

Share this post


Link to post
Share on other sites
Hellblazer

O teu selectedindex ou seja o ID da noticia vais buscar por QueryString ou guardas em sessão? e que pelo que descreves parece que ele inicia sempre cada vez que faz load da pagina  :(


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
MACkie

you got a point. Não me lembrei disso.

Cada vez que ele "navega" para outra noticia, faz um reload da página reinicializando assim a variável.

Como é que eu faço para se manter?

Cumps

EDIT: Passo o valor da variável com um POST? Tal como em php...


private void doNotDisturb(string motive)if(motive.compareTo(somethingReallyImportant) == 0)pay attention;else//do nothing

Share this post


Link to post
Share on other sites
Hellblazer

Podes adicionar a sessão:

Session.Add("IDNoticia", SelectedNews);

e apanhas a variavel com:

SelectedNews = Convert.ToInt32(Session("IDNoticia"))

ou então:

Response.Redirect("Noticias.aspx?IDNoticia=" & SelectedNews);

e depois apanhas a variavel com o:

SelectedNews = Convert.ToInt32(Request.QueryString("IDNoticia"));

Sorry se tiver algum erro lol ja nao programo em C# a um bom tempo :(


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
MACkie

Going to try.

Tnks in advance :(


private void doNotDisturb(string motive)if(motive.compareTo(somethingReallyImportant) == 0)pay attention;else//do nothing

Share this post


Link to post
Share on other sites
Hellblazer

depois diz se funcionou ou nem por isso :S


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
MACkie

Tou com problemas é onde crio a sessão. Se criar na página de "index" das noticias - e a aparecer a primeira - cada vez que fizer o reload volta à primeira, certo?

Devo iniciar a sessão na "default.aspx"?

Cumps


private void doNotDisturb(string motive)if(motive.compareTo(somethingReallyImportant) == 0)pay attention;else//do nothing

Share this post


Link to post
Share on other sites
Hellblazer

Quando vais as noticias aparece sempre a primeira?

A melhor abordagem era fazeres por querystring.

Entrar na pagina das noticias, se aparecer sempre a primeira entao fica algo do tipo: Noticias.aspx?IDNoticia=1 ou se nao entrares na primeira depende noticia entao do tipo Noticias.aspx?ID=X.

Depois no codigo do butao ias buscar a querystring da maneira que eu ja te disse anteriormente:

intIDNoticia = Convert.ToInt32(Request.QueryString("IDNoticia"));

e ai fazeres o increment  :cheesygrin:

depois redireccionas para essa noticia:

Response.Redirect("Noticias.aspx?IDNoticias" + intIDNoticia);

Nota que depois a noticia no page load ia ser carregada conforme o ID no URL  :cheesygrin:


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
MACkie

agora nao me aparece nada porque dá-me erro :S

Tou a fritar :x

Tou aqui a ver se consigo perceber isto através de uns livros... Tá dificil.


private void doNotDisturb(string motive)if(motive.compareTo(somethingReallyImportant) == 0)pay attention;else//do nothing

Share this post


Link to post
Share on other sites
Hellblazer

lol  🤔 nunca fui muito bom a explicar...

como usar pagina de noticias como querystring:

-No Page Load

            sqlconnect();
            selectedNews = Convert.ToInt32(Request.QueryString("IDNoticia"));
            MySqlCommand nextCommand = new MySqlCommand("Select * from news where number = '" + selectedNews + "'", connection);
            MySqlDataReader reader = nextCommand.ExecuteReader();
            while (reader.Read())
            {
                newsArray[0] = (string)reader["title"].ToString();
                newsArray[1] = (string)reader["body"].ToString();
            }
            Label1.Text = newsArray[0].ToString();
            TextBox1.Text = selectedNews + " de " + totalNews;

Depois no butão:

protected void nextNews(object sender, EventArgs e)
    {
        
        if (selectedNews <= Convert.ToInt32(totalNews))
        {
            sqlconnect();
            selectedNews = Convert.ToInt32(Request.QueryString("IDNoticia"));
            this.selectedNews++;
            MySqlCommand nextCommand = new MySqlCommand("Select * from news where number = '" + selectedNews + "'", connection);
            MySqlDataReader reader = nextCommand.ExecuteReader();
            while (reader.Read())
            {
                newsArray[0] = (string)reader["title"].ToString();
                newsArray[1] = (string)reader["body"].ToString();
            }
            Label1.Text = newsArray[0].ToString();
            TextBox1.Text = selectedNews + " de " + totalNews;
            sqldisconnect();
        }
    }


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
MACkie

e, no meio disso tudo, continuo sem saber onde meto o Session.add("IDNoticia", selectedIndex); :s


private void doNotDisturb(string motive)if(motive.compareTo(somethingReallyImportant) == 0)pay attention;else//do nothing

Share this post


Link to post
Share on other sites
Hellblazer

e, no meio disso tudo, continuo sem saber onde meto o Session.add("IDNoticia", selectedIndex); :s

Se utilizares o metodo da querystring nao precisas de usar o session :( ja para nao falar do facto de poderes a qualquer momento entrar na noticia 3 ou 4 ou 5 directamente :)


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites
MACkie

Consegui!

Utilizei os QueryStrings para fazer um retrieve da newsid. Tava a dar espiga até meter o "autoredirect" de news.aspx para news.aspx?NewsID=1

Muito obrigado. Este era o meu maior problema porque o funcionamento das noticias vai ser igual para o da galeria de fotos.

Havia de te nascer três grades de cerveja no frigorífico :(

Cups


private void doNotDisturb(string motive)if(motive.compareTo(somethingReallyImportant) == 0)pay attention;else//do nothing

Share this post


Link to post
Share on other sites
Hellblazer

hahaah  :)

ainda bem que conseguis-te :) hehe

Não te esquesas e de meter Resolvido no nome do topico para um melhor funcionmento do mesmo :)

Cumps  :(


There are two ways to write error-free programs; only the third one works.

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

×

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.