问题描述
|
我想在运行时选择
DataSource
并在用户从DropDownList
中选择一个选项时绑定GridView
。但是所选表或连接未正确建立。
请检查以下代码,并提供适当的解决方案。
public partial class index : System.Web.UI.Page
{
SqlConnection conn = new SqlConnection();
string option = \"\";
protected void Page_Load(object sender,EventArgs e)
{
option = selectProductdropdown.SelectedValue;
}
protected void Button1_Click(object sender,EventArgs e)
{
Label2.Text = option;
if (option == \"Books\")
{
Label3.Text = option;
conn.ConnectionString = ConfigurationManager.ConnectionStrings[\"booksconnectionstring\"].ConnectionString;
conn.Open();
SqlCommand cmd = new SqlCommand(\"SELECT * from books\",conn);
cmd.CommandType = CommandType.Text;
SqlDataAdapter reader = new SqlDataAdapter(cmd);
DataSet s = new DataSet();
reader.Fill(s);
GridView1.DataSource = s;
GridView1.DataBind();
conn.Close();
}
解决方法
问题出在page_load事件中,您在其中为选项分配值。当您单击按钮时,page_load将再次调用,并且您的值将重置。
它应该是...
protected void Page_Load(object sender,EventArgs e)
{
if(!Page.IsPostBack)
option = selectProductdropdown.SelectedValue;
}
否则,如果您愿意的话会更好。
if (selectProductdropdown.SelectedValue == \"Books\")
,因为您可能在每次加载页面时都选择了清空选项。
,避免使用公共变量字符串选项= \“ \”;
而是在Click事件中定义相同的内容并在那里获取选定的值
option = selectProductdropdown.SelectedValue;// move to click event
因为当单击按钮时,下拉菜单将被重置(假设您未在此处显示下拉菜单绑定代码)
,protected void Page_Load(object sender,EventArgs e)
{
if (!Page.IsPostBack)
option = selectProductdropdown.SelectedValue;
}
,您已省略此行:
cmd.ExecuteReader();
将其放在语句之间,如下所示:
SqlCommand cmd = new SqlCommand(\"SELECT * from books\",conn);
cmd.ExecuteReader(); // <-- HERE
cmd.CommandType = CommandType.Text;