我正在使用 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/