2013-06-13 1 views
0

У меня проблема с ASP и C#. У меня есть форма с двумя раскрывающимися списками, одна показывает тему, а другая показывает подтему, теперь я добавил StoredProcedure, которая проверяет, имеет ли пользователь разрешение на просмотр тема, если она будет добавлена ​​в раскрывающийся список, и она отлично работает, но когда я выбираю тему, она просто возвращается к первому варианту всегда, кто-нибудь знает, что я могу сделать? я читал о Postback из-за привязки ставить я не кажется, чтобы заставить его работать вот мой код ... Ive также попытался использовать sqladapter же вопрос Тхо ....Выпадение появляется пустым после обратной передачи C# asp

хранимая процедура

USE [Forum] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[SP_verutilizadorTopico] 

    (

    @id_user int 
    ) 

AS 
    SELECT UtilizadorTopico.IdTopico, Topico.Id_topico, Topico.Nome FROM UtilizadorTopico INNER JOIN Topico ON UtilizadorTopico.IdTopico = Topico.Id_topico WHERE (UtilizadorTopico.IdUtilizador = @id_user) 
    RETURN 

и мой C# код

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 
{ 
    string loginid = ""; 
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["forumConnectionString2"].ToString()); 
    public void Page_Load(object sender, EventArgs e) 
    {  
     if (!Page.IsPostBack) 
     {   
      topico1(); 
      BindRepeaterData(); 
      BindRepeaterDataPost(); 
     } 

     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 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(); 
     } 
    } 

    public void topico1() 
    { 
     SqlConnection conn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["forumConnectionString2"].ToString());   //definição do comando sql 
     conn2.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 comm2 = conn2.CreateCommand(); 
     comm2.CommandType = CommandType.StoredProcedure; 
     comm2.CommandText = "SP_verutilizadorTopico"; 
     comm2.Parameters.AddWithValue("@id_user", loginid); 
     SqlDataReader rdrtop = comm2.ExecuteReader(); 

     droptopico.DataSource = rdrtop; 
     droptopico.DataTextField = "Nome"; 
     droptopico.DataValueField = "Id_topico"; 
     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 da = new SqlDataAdapter(cmd); 
     da.Fill(ds); 
     RepDetails.DataSource = ds; 
     RepDetails.DataBind(); 
     conn.Close(); 
    } 

    protected void DropsubSelectedIndexChanged(object sender, EventArgs e) 
    { 
     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", loginid); 
     comm2.Parameters.AddWithValue("@id_topico", droptopico.SelectedValue); 
     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 ds = new DataSet(); 
     if (dropsub.SelectedValue != "") 
     { 
      cmd.Parameters.AddWithValue("@id_sub", this.dropsub.SelectedValue); 
     } 
     else 
     { 
      cmd.Parameters.AddWithValue("@id_sub", 1); 
     } 

     SqlDataAdapter da = new SqlDataAdapter(cmd); 

     da.Fill(ds); 
     RepDetailsPost.DataSource = ds; 
     RepDetailsPost.DataBind(); 
     conn.Close(); 
    } 

    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(); 
     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); 
     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; 
    } 




} 

Topico1(), где связываются с DropDownList.

+1

я удалил мой ответ, потому что я был явно неправильно (Page.IsPostBack!) - даже если я имел upvotes .. Какой выпадающий список дает проблему. 'droptopico' или' dropsub'? – Darren

+0

droptopico, спасибо за помощь, вы должны оставить свой ответ, он может помочь кому-то еще, это был хороший ответ. dropub только показать, если я выбираю droptopico. – user2427935

ответ

0

Put следующий код в функции

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 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(); 
    } 

и называют эту функцию внутри если

+0

спасибо, он загружает и заполняет droptopic, но когда я выбираю элемент, он становится пустым, мне нужно, чтобы он оставался выбранным, поэтому я могу выбрать подтему – user2427935

+0

любую идею, почему, когда я выбираю тему, droptopic становится пустым? – user2427935