0

私が直面している問題を解決するために、あなたの支援をお願いしたいと思います.

私の問題は、orderID 1 に関連付けられている製品が製品 2 であるため、ドロップダウン リストに Test と Sample ではなく SAMPLE の 2 つの項目 (製品 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

表の が 2 に設定されているSampleときに両方の項目が変更される理由は、イニシャルがリストの最初の項目であるためです。ユーザーはまだページに対して何もしていません。したがって、次のロジックが実行されると:ProductIDOrdersSelectedItem

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

はドロップダウン リストの最初の項目であり、選択した項目のプロパティに適用する製品名としてddlProduct.SelectedItem返されたデータベースへのクエリであり、テキスト値が既にあるリストの 2 番目の項目には何もしません。したがって、ドロップダウン リストの両方の項目が同じテキスト値を持つようになりました。SampleTextSampleSample

あなたの「問題」は、ユーザーが技術的にアイテムをまったく選択していなくても、ドロップダウンリストで最初に選択されたアイテムがリストの最初のアイテムであることです。ここに来ても、あなたが実際にどのような行動をとっているのかわかりません。ユーザーがドロップダウン リストから項目を選択すると、選択した項目のテキストが変更される可能性がありますか?

于 2013-11-05T18:53:46.617 に答える