2

データ (データリストにある) を価格で並べ替えようとしています。ユーザーが最も高いものから最も安いもの、またはその逆の価格を希望する場合に選択できる DropDownList があることを意味します。データベースに保存されている価格は、catID に従ってランダムな順序になっています。私は次のようにコードを書きましたが、私が書いたものに従ってソートされませんでした。私はここで何を間違えましたか?私に助言してください。

protected void Page_Load(object sender, EventArgs e)
{

}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    bindDropDownList();
}

private void bindDropDownList()
{
    DropDownList1.DataTextField = "price";
    DataList1.DataSourceID = null;
    DataList1.DataSource = getReader();
    DropDownList1.DataBind();

}

private SqlDataReader getReader()
{
    SqlDataReader reader = null;

    if(DropDownList1.Text == "-Select-")
    {
      string strConnectionString =
            ConfigurationManager.ConnectionStrings["ProBizConnection"].ConnectionString;
        SqlConnection myConnect = new SqlConnection(strConnectionString);

        string strCommandText ="SELECT * FROM [Category ] WHERE catID<= 20";

        SqlCommand cmd = new SqlCommand(strCommandText, myConnect);
        myConnect.Open();

   reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

    }
    else if (DropDownList1.SelectedValue == "Price - Highest to Lowest")
    {
        string strConnectionString =
            ConfigurationManager.ConnectionStrings["ProBizConnection"].ConnectionString;
        SqlConnection myConnect = new SqlConnection(strConnectionString);

        string strCommandText = "SELECT catID, packageName, price, description1, description2, image1, image2 FROM Category WHERE catID <= 20 ORDER BY price desc";

        SqlCommand cmd = new SqlCommand(strCommandText, myConnect);
        myConnect.Open();

   reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

    }

    else if (DropDownList1.DataTextField == "Price - Lowest to Highest")
    {
        /string strConnectionString =
            ConfigurationManager.ConnectionStrings["ProBizConnection"].ConnectionString;
        SqlConnection myConnect = new SqlConnection(strConnectionString);

        string strCommandText = "SELECT catID, packageName, price, description1, description2, image1, image2 FROM Category WHERE catID <= 20 ORDER BY price";

        SqlCommand cmd = new SqlCommand(strCommandText, myConnect);
        myConnect.Open();

   reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

    }
    return reader;
}

私の .aspx コード:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" AppendDataBoundItems="true" 
            onselectedindexchanged="DropDownList1_SelectedIndexChanged" Height="18px" 
            Width="184px">
            <asp:ListItem>-Select-</asp:ListItem>
            <asp:ListItem>Price - Highest to Lowest</asp:ListItem>
            <asp:ListItem>Price - Lowest to Highest</asp:ListItem>
        </asp:DropDownList>
4

3 に答える 3

2

Priceのデータ型が小数ではなく、Varcharである可能性があるため、Price列で並べ替えが正しく機能していない可能性があります

したがって、並べ替えを正しく行うには、Priceデータ型をDecimalに変更してください。

于 2012-07-23T11:33:45.097 に答える
0

私が見ることができる3つのエラーがあります...

1)getReaderコードには、null を返すパスがあります。else他のチェックが false の場合に備えて、常にデフォルトの があることを確認する必要があります。

DropDownList1.SelectedValue2)リーダーにデータバインドさせようとしているときに、の値を読み取っています。これは私には間違っているように見えます.2つのドロップダウンがあると思います.1つは注文情報で、もう1つは設定してデータバインドしたいものです...

3) 比較している getReader の elseif で、バインドしてDropDownList1.DataTextFieldいるフィールドの名前を含める必要があります (メソッド"price"のコードの前半で設定しますbindDropDownList

これらのエラーのいずれかが発生している場合 (現在発生していない場合は、おそらく将来発生する可能性があります)、デバッグ モードでステップ実行するだけで、これを発見できたはずです。これにより、コードがダウンしているパスなどがわかります。

上記のいずれも現在の問題の原因でない場合は、詳細をお知らせください。あなたの説明では、何が問題だったのかを正確に説明するのに十分ではなかったため、3 つの個別の問題を強調する必要がありました。

http://tinyurl.com/so-hintsは、質問が適切で簡単に答えられる理由を説明するために書かれたページへの非常に便利なリンクです。

于 2012-07-23T11:37:56.540 に答える
0

この行は間違っていると思います。true と評価されない可能性があります

 else if (DropDownList1.DataTextField == "Price - Lowest to Highest")

する必要があります

 else if (DropDownList1.SelectedValue == "Price - Lowest to Highest")

またはさらに良い

 else if (DropDownList1.Text == "Price - Lowest to Highest")

アップデート:

AppendDataBoundItems="true"ドロップダウン項目をいじっている可能性があります。Lowest と Highest の結果がマージされているため、違いがわかりません。

デフォルトのリスト項目を削除し、コード ビハインドに配置します

private void bindDropDownList()
{
   DropDownList1.DataTextField = "price";
   DropDownList1.DataSource = getReader();
   DropDownList1.DataBind();

   DropDownList1.Items.Insert(0, new ListItem("-Select-"));
   DropDownList1.Items.Insert(1, new ListItem("Price - Highest to Lowest"));
   DropDownList1.Items.Insert(2, new ListItem("Price - Lowest to Highest"));
}

別のアプローチについては、DropDownList AppendDataBoundItems を確認してください (最初の項目は空白で重複はありません)。

于 2012-07-23T12:01:36.000 に答える