c# - 标签上打印的数据库下拉列表值

标签 c# sql asp.net database dropdown

我正在使用 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();
        }

最佳答案

在您的加载事件和您在 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();
        }
}

关于c# - 标签上打印的数据库下拉列表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51072270/

相关文章:

sql - foreach 和 do while 用于构建插入查询

asp.net - 带有 WebAPI 的 fiddler 表现不稳定

asp.net - Web.config 文件中appSettings 和connectionStrings 之间的区别?

c# - 防止打包 .Net 可执行文件的内存转储?

c# - 如何使用 MS Open XML SDK 检索一些图像数据和格式?

c# - LINQ 有多少?

c# - MVC 4 回发空 View 模型

c# - <= 确实比 < 慢

mysql - SQL 中的 WHERE 条件问题

sql - 将数据类型 varchar 转换为 float 时出错