所选项目在DDL项目中成倍增加

时间:2013-11-05 18:42:17

标签: asp.net drop-down-menu

我想请求您协助解决我遇到的问题。

我的问题是,下拉列表将显示2项SAMPLE(产品2)而不是Test和Sample,因为与orderID 1关联的产品是产品2.

但如果我将OrdersTable中的productID从2更改为1,则所有内容都将正确显示。那是为什么?

OrdersTable中

OrderID      ProductID
1            2

ProductsTable

ProductID    ProductName
1            Test
2            Sample

ASP.NET代码

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        GetOrders();
        GetProducts();
    }
}
private void GetOrders()
{
    con.Open();
    SqlCommand com = new SqlCommand();
    com.Connection = con;
    com.CommandType = CommandType.Text;
    string SQL = 
        "SELECT o.OrderID, o.ProductID, p.ProductName FROM Orders AS o, Products AS p WHERE o.ProductID = p.ProductID";

    com.CommandText = SQL;
    SqlDataReader data = com.ExecuteReader();
    while (data.Read())
    {
        ddlProduct.SelectedItem.Text = data["ProductName"].ToString();     
    }
}
private void GetProducts()
{
    con1.Open();
    SqlCommand com = new SqlCommand();
    com.Connection = con1;
    com.CommandType = CommandType.Text;
    com.CommandText =
        "SELECT * FROM Products";

    SqlDataReader data = com.ExecuteReader();

    ddlProduct.DataSource = data;
    ddlProduct.DataValueField = "ProductID";
    ddlProduct.DataTextField = "ProductName";
    ddlProduct.DataBind();

    data.Close();
    con1.Close();
}

1 个答案:

答案 0 :(得分:0)

Sample表中的ProductID设置为2时,您将两个项目都更改为Orders的原因是因为初始SelectedItem是第一项列表;用户尚未对页面做任何事情。因此,当执行以下逻辑时:

while (data.Read())
{
    ddlProduct.SelectedItem.Text = data["ProductName"].ToString();     
}

ddlProduct.SelectedItem是下拉列表中的第一项,对数据库的查询返回Sample作为要应用于所选项目的Text属性的产品名称,并且不执行任何操作列表中第二个项目的文本值已为Sample;因此,现在下拉列表中的两个项目都具有相同的Sample文本值。

您的“问题”是下拉列表中的初始选定项目是列表中的第一项,即使用户在技术上根本没有选择项目。我不确定你在这之后甚至是什么行为;用户从下拉列表中选择一个项目,他们选择的项目的文本可能会发生变化吗?