0

編集/削除ボタンのある製品(データベースから取得)を一覧表示するasp.netページがあります。ユーザーは編集ボタンをクリックして製品を編集できます。選択した製品に基づいて、データベースからテキストボックスにデータを取り込むことができました。ただし、ドロップダウンボックスに重複するアイテムが表示されます。たった32個のアイテムと160個のアイテムがあるはずです(各アイテムは5回表示されます)。Items.Clear()を使用しましたが、まだ重複しています。また、ドロップボックスには、現在データベースにあるその製品の適切なアイテムではなく、リストの最初のアイテムが表示されます。誰かが私が間違っているかもしれないことを見ることができますか?

ありがとう。

 protected void Page_Load(object sender, EventArgs e)
    {
        this.Master.HighlightNavItem("Products");
        string Mode = (Request.QueryString["Mode"]);

        //Upon opening page, if this is an edit to existing product (populate product data)
        if (Mode == "E")
        {
            if (!IsPostBack)
            {
                int ProductID = Int32.Parse(Request.QueryString["ID"]);

                //Declare the connection object
                SqlConnection Conn = new SqlConnection();
                Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

                //Connect to the db
                Conn.Open();

                //Define the query                    
                //string sql = "SELECT dbo.Vendor.VendorName, dbo.Vendor.VendorID, dbo.Product.ProductName, dbo.Product.ProductNumber, dbo.lu_Category.CategoryID, dbo.lu_Category.Description FROM dbo.Product INNER JOIN dbo.Vendor ON dbo.Product.VendorID = dbo.Vendor.VendorID INNER JOIN dbo.lu_Category ON dbo.Product.CategoryID = dbo.lu_Category.CategoryID WHERE ProductID=@ProductID";
                string sql = "SELECT ProductName, ProductNumber, ProductDescription, Cost, Markup, Unit, QtyOnHand, ShippingWeight, dbo.Vendor.VendorID, VendorName, dbo.lu_Category.CategoryID, Description FROM Vendor, Product, lu_Category WHERE ProductID=@ProductID";

                //Declare the Command
                SqlCommand cmd = new SqlCommand(sql, Conn);

                //Add the parameters needed for the SQL query
                cmd.Parameters.AddWithValue("@ProductID", ProductID);

                //Declare the DataReader
                SqlDataReader dr = null;

                //Fill the DataReader
                dr = cmd.ExecuteReader();

                //Loop through the DataReader
                ddlVendor.Items.Clear();
                while (dr.Read())
                {

                    txtProductName.Text = dr["ProductName"].ToString();
                    txtProductNo.Text = dr["ProductNumber"].ToString();
                    txtDescription.Text = dr["ProductDescription"].ToString();
                    txtCost.Text = dr["Cost"].ToString();
                    txtMarkup.Text = dr["Markup"].ToString();
                    txtUnit.Text = dr["Unit"].ToString();
                    txtQty.Text = dr["QtyOnHand"].ToString();
                    txtWeight.Text = dr["ShippingWeight"].ToString();
                    ListItem li = new ListItem();
                    li.Text = dr["VendorName"].ToString();
                    li.Value = dr["VendorID"].ToString();
                    ddlVendor.Items.Add(li);
4

2 に答える 2

1

結合のタイプを変更してSQL query削除する必要があります。 次に、クエリをデータベースで直接テストして、double が発生しないことを確認します。,

コードの残りの部分は問題ないように見えるので、クエリをテストすることで問題が解決すると確信しています。非推奨
なので使用しないでください。Comma Joins

于 2012-11-29T18:36:49.740 に答える
0

データを取得するには、内部結合または外部結合を使用する必要があったと思います。「,」で区切られた結合を使用すると、両方のテーブルからデータを受け取ります。1 つのテーブルの 32 行が他のテーブルの 5 行に追加されます。

于 2012-11-29T18:43:06.210 に答える