0

我想请您帮忙解决我遇到的问题。

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

但是,如果我将 OrdersTable 中的 productID 从 2 更改为 1,一切都会正确显示。这是为什么?

订单表

OrderID      ProductID
1            2

产品表

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();
}
4

1 回答 1

0

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

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

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

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

于 2013-11-05T18:53:46.617 回答