-4

我的代码有问题。

我已经看到了一些答案,但我无法让它在我的代码中工作,希望有人可以帮助我已经尝试修复了很长一段时间。下面是我的代码。

我尝试了回发语句但仍然无法正常工作,droptopico 总是返回 0;我需要那个值,所以我可以从 dropsub 中选择一些东西。

基本上这段代码是实现一个用户选择一个主题的论坛,它将从该主题生成子主题,并显示用户是否有权限,有人可以帮助我......提前致谢。

我在mysql管理上使用Storedprocedure - 它工作正常,所以我认为问题可能出在绑定中,只是不知道如何修复它......

  using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Web.UI.WebControls;
    using System.Configuration;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Text;

    public partial class About : System.Web.UI.Page
    {  
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["forumConnectionString2"].ToString());
        public void Page_Load(object sender, EventArgs e)
        {       
            if (Page.IsPostBack == false) 
            {        login();            
                  topico1();
                  subtopico1();
                BindRepeaterData();
                BindRepeaterDataPost();    

            }
         }

            public void login()
    {string loginid = "";
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["forumConnectionString2"].ToString());          //definição do comando sql
            conn.Open();
            SqlCommand comm = conn.CreateCommand();
            comm.CommandType = CommandType.StoredProcedure;
            comm.CommandText = "SP_veruseraposlogin";
            comm.Parameters.AddWithValue("@nome", Page.User.Identity.Name);



            SqlDataReader rdr = comm.ExecuteReader();

            if (rdr.HasRows)
            {

                while (rdr.Read())
                {
                    loginid = rdr["Id"].ToString();


                }

                Lblidlog.Text = loginid;

                conn.Close();

            }
        }
            protected void subtopico1()
            {

                SqlConnection conn3 = new SqlConnection(ConfigurationManager.ConnectionStrings["forumConnectionString2"].ToString());          //definição do comando sql
                conn3.Open();
                SqlCommand comm3 = conn3.CreateCommand();
                comm3.CommandType = CommandType.StoredProcedure;
                comm3.CommandText = "SP_verutilizadorsubtopicoforum";            
                comm3.Parameters.AddWithValue("@id_user", Lblidlog.Text);
                comm3.Parameters.AddWithValue("@id_top", droptopico.SelectedValue.ToString());

                    SqlDataReader rdrsub = comm3.ExecuteReader();

                dropsub.DataSource = rdrsub;          
                dropsub.DataValueField = "Id_subtopico";
                dropsub.DataTextField = "nome";
                dropsub.DataBind();

                rdrsub.Close();
                conn3.Close();

            }


            protected void topico1()
            {

                SqlConnection conn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["forumConnectionString2"].ToString());          //definição do comando sql
                conn2.Open();
                SqlCommand comm2 = conn2.CreateCommand();
                comm2.CommandType = CommandType.StoredProcedure;
                comm2.CommandText = "SP_verutilizadorTopico";
                comm2.Parameters.AddWithValue("@id_user", Lblidlog.Text);

                SqlDataReader rdrtop = comm2.ExecuteReader();

                    droptopico.DataSource = rdrtop;
                    droptopico.DataValueField = "Id_Topico";
                    droptopico.DataTextField = "nome";
                    droptopico.DataBind();         

                rdrtop.Close();
                conn2.Close();
            }


        protected void BindRepeaterData()
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("select * from Mensagem where id_subtopico = @id_sub Order By data desc", conn);
            DataSet ds = new DataSet();

            if (dropsub.SelectedValue != "")
            {
                cmd.Parameters.AddWithValue("@id_sub", this.dropsub.SelectedValue);
            }
            else
            {
                cmd.Parameters.AddWithValue("@id_sub", 1);
            }

            SqlDataAdapter dab = new SqlDataAdapter(cmd);

            dab.Fill(ds);
            RepDetails.DataSource = ds;
            RepDetails.DataBind();
            conn.Close();
        }  
        protected void DropsubSelectedIndexChanged(object sender, EventArgs e)
        {
            login();
            topico1();
            BindRepeaterData();
            BindRepeaterDataPost();
        }
        protected void BindRepeaterDataPost()
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("SELECT Post.*, Ficheiro.Nome FROM Ficheiro INNER JOIN Post ON Ficheiro.IdFicheiro = Post.IdFicheiro  where Post.id_subtopico = @Id_sub Order By data desc", conn);
            DataSet das = new DataSet();
            if (dropsub.SelectedValue != "")
            {
                cmd.Parameters.AddWithValue("@id_sub", this.dropsub.SelectedValue);
            }
            else
            {
                cmd.Parameters.AddWithValue("@id_sub", 1);
            }

            SqlDataAdapter daa = new SqlDataAdapter(cmd);

            daa.Fill(das);
            RepDetailsPost.DataSource = das;
            RepDetailsPost.DataBind();
            conn.Close();
        }

        //Bind Data to Repeater Control

        protected void Button1_Click(object sender, EventArgs e)
        {
            //definição da string de conexão
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["forumConnectionString2"].ToString());          //definição do comando sql

            conn.Open();
            //Cria uma objeto do tipo comando passando como parametro a string sql e a string de conexão

            //Adicionando o valor das textBox nos parametros do comando
            SqlCommand sqlCommand = conn.CreateCommand();
            sqlCommand.CommandType = CommandType.StoredProcedure;

            sqlCommand.CommandText = "usp_inserirmsg";

            sqlCommand.Parameters.AddWithValue("@id_sub", this.dropsub.SelectedValue);
            sqlCommand.Parameters.AddWithValue("@nome_user", Page.User.Identity.Name);
            sqlCommand.Parameters.AddWithValue("@msg", this.txtmsg.Text);

            //executa o comando com os parametros que foram adicionados acima
            sqlCommand.ExecuteNonQuery();
            this.lblstatusmsg.ForeColor = Color.FromArgb(255, 6, 255, 196);
            lblstatusmsg.Text = "Mensagem enviada";
            conn.Close();
        }
        protected void novocomentario_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            Panel1.Visible = true;
        }

        protected void droptopico_SelectedIndexChanged(object sender, EventArgs e)
        {
            login();
            topico1();
            subtopico1();
        }
        protected void Button3_Click(object sender, EventArgs e)
        {
            login();
            topico1();
        }
    }
4

1 回答 1

1

您已经在这段代码中调用了 topico1() 函数,并且该函数再次绑定了下拉列表。下拉值再次刷新。请删除对 topico1() 函数的调用。

protected void droptopico_SelectedIndexChanged(object sender, EventArgs e)
{
    login();
    //topico1();
    subtopico1();
}
于 2013-06-17T11:25:50.890 回答