我在使用 ASP 和 C# 时遇到问题 我有一个带有 2 个下拉列表的表单,一个显示主题,另一个显示子主题,现在我添加了一个 StoredProcedure 来检查用户是否有权查看该主题,如果有,它将被添加到下拉列表,它工作正常,但是当我选择一个主题时,它总是返回到第一个选项,有人知道我能做什么吗?我已经阅读过关于回发的信息,因为绑定放我似乎无法让它在这里工作是我的代码......我也尝试过使用 sqladapter 相同的问题......
存储过程
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() 是绑定到下拉列表的位置。