【问题标题】:Database dropdown list value printed on labels打印在标签上的数据库下拉列表值
【发布时间】:2018-12-06 21:49:45
【问题描述】:

我正在使用 ASP.net 来制作下拉菜单。下拉菜单链接到数据库,一切正常。如果在下拉列表中选择了一个值,则必须填充与数据库中的下拉值匹配的标签。 希望我很清楚,这是我到目前为止所拥有的:

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        OleDbConnection conn = new OleDbConnection();
        conn.Open();
        conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + Server.MapPath(@"\App_Data") + @"\JipEnJanneke.mdb";


        OleDbCommand cmd1 = new OleDbCommand("Select (Prijs, Jaartal, ISBN) from JipEnJanneke where Titel = @Titel", conn);
        cmd1.Parameters.AddWithValue("@Titel", DropDownList1.SelectedValue.ToString());
        OleDbDataReader rd = cmd1.ExecuteReader();
        while (rd.Read())
        {
            lbl_Prijs.Text = rd["Prijs"].ToString();
            lbl_Jaar.Text = rd["Jaartal"].ToString();
            lbl_Isbn.Text = rd["ISBN"].ToString();
        }
        conn.Close();

不幸的是,这使标签为空。如果我将该函数添加到我的 page_load 中,标签确实会被填充,但由于某种原因,只能填充下拉列表中的第一个值。此处的类似帖子建议将其推到 selectindexchanged 中,但这对我来说是空的。有人有想法吗?

这是我现在的 page_load 事件

        OleDbConnection conn = new OleDbConnection();
        conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + Server.MapPath(@"\App_Data") + @"\JipEnJanneke.mdb";
        //conn.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0; Data Source=" + Server.MapPath(@"\App_Data") + @"\JipEnJanneke.mdb";

        lblConnectionFeedback.Text = "";
        try
        {
            conn.Open();
            lblConnectionFeedback.Text += "Connection is: " + conn.State.ToString();

            // HIER QUERY
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = conn;
            cmd.CommandText = "SELECT * FROM Boeken";

            OleDbDataReader rd = cmd.ExecuteReader();

            DropDownList1.DataSource = rd;
            DropDownList1.DataTextField = "Titel";
            DropDownList1.DataValueField = "Titel";
            DropDownList1.DataBind();
            rd.Close();

            conn.Close();

        }
        catch (Exception exc)
        {
            lblConnectionFeedback.Text = exc.Message;
        }
        finally
        {
            conn.Close();
            lblConnectionFeedback.Text += "<br />Connection is: " + conn.State.ToString();
        }

【问题讨论】:

    标签: c# sql asp.net database dropdown


    【解决方案1】:

    在您的加载事件和 dropdown_selectedindexchanged 中的代码中,检查页面的 IsPostBack。例如:

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
    if (IsPostBack){
            OleDbConnection conn = new OleDbConnection();
            conn.Open();
            conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + Server.MapPath(@"\App_Data") + @"\JipEnJanneke.mdb";
    
    
            OleDbCommand cmd1 = new OleDbCommand("Select (Prijs, Jaartal, ISBN) from JipEnJanneke where Titel = @Titel", conn);
            cmd1.Parameters.AddWithValue("@Titel", DropDownList1.SelectedValue.ToString());
            OleDbDataReader rd = cmd1.ExecuteReader();
            while (rd.Read())
            {
                lbl_Prijs.Text = rd["Prijs"].ToString();
                lbl_Jaar.Text = rd["Jaartal"].ToString();
                lbl_Isbn.Text = rd["ISBN"].ToString();
            }
            conn.Close();
    }
    }
    

    加载:

    if (!IsPostBack){
       OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + Server.MapPath(@"\App_Data") + @"\JipEnJanneke.mdb";
            //conn.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0; Data Source=" + Server.MapPath(@"\App_Data") + @"\JipEnJanneke.mdb";
    
            lblConnectionFeedback.Text = "";
            try
            {
                conn.Open();
                lblConnectionFeedback.Text += "Connection is: " + conn.State.ToString();
    
                // HIER QUERY
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = conn;
                cmd.CommandText = "SELECT * FROM Boeken";
    
                OleDbDataReader rd = cmd.ExecuteReader();
    
                DropDownList1.DataSource = rd;
                DropDownList1.DataTextField = "Titel";
                DropDownList1.DataValueField = "Titel";
                DropDownList1.DataBind();
                rd.Close();
    
                conn.Close();
    
            }
            catch (Exception exc)
            {
                lblConnectionFeedback.Text = exc.Message;
            }
            finally
            {
                conn.Close();
                lblConnectionFeedback.Text += "<br />Connection is: " + conn.State.ToString();
            }
    }
    

    【讨论】:

    • 我越来越近了,但现在我收到基于第 120 行的错误,即 OleDbDataReader rd = cmd1.ExecuteReader();我选择的索引处的行。但是由于 while 语句,我需要保留它...
    【解决方案2】:

    请检查 DropDownList1 的 AutoPostBack 属性是否设置为 True。

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2014-04-18
      • 2016-01-09
      相关资源
      最近更新 更多