ページにリストビューがあり、2 つのドロップダウンリストでフィルター処理したいので、リストビューとコントロールの両方を実装しました。
私が発見したのは、両方のコントロールが同時に機能しないということです。最初のコントロールは問題なく動作しますが、最初のコントロールが設定されているかどうかに関係なく、2 番目のコントロールは動作しません (デフォルトではすべて表示)。
これを回避する方法はありますか?以下に、VS で使用しているコードと C# コードを記述しました。
ビジュアルスタジオ
<asp:AccessDataSource ID="AccessDataSource1" runat="server"
DataFile="~/App_Data/ASPNetDB.mdb"
SelectCommand="SELECT * FROM [Library]">
<SelectParameters>
<asp:ControlParameter ControlID="SideContent:DropDownList1" Name="Category"
PropertyName="SelectedValue" Type="String" DefaultValue="" />
<asp:ControlParameter ControlID="SideContent:DropDownList2" Name="Region"
PropertyName="SelectedValue" Type="String" DefaultValue="" />
</SelectParameters>
</asp:AccessDataSource>
Category:
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="AccessDataSource2" DataTextField="CatName"
DataValueField="CatID" AppendDataBoundItems="true" AutoPostBack="true"
onselectedindexchanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem Value="0" Selected ="True" >All Categories</asp:ListItem>
</asp:DropDownList>
<asp:AccessDataSource ID="AccessDataSource2" runat="server"
DataFile="~/App_Data/ASPNetDB.mdb" SelectCommand="SELECT * FROM [CategoryTable]">
</asp:AccessDataSource>
Region:
<asp:DropDownList ID="DropDownList2" runat="server"
DataSourceID="AccessDataSource3" DataTextField="RegionName"
DataValueField="RegionID" AppendDataBoundItems="true" AutoPostBack="true"
onselectedindexchanged="DropDownList2_SelectedIndexChanged">
<asp:ListItem Value="0" Selected ="True" >All Regions</asp:ListItem>
</asp:DropDownList>
<asp:AccessDataSource ID="AccessDataSource3" runat="server"
DataFile="~/App_Data/ASPNetDB.mdb"
SelectCommand="SELECT * FROM [RegionsTable]">
</asp:AccessDataSource>
C#
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
var Category = DropDownList1.SelectedValue;
int intCategory = Convert.ToInt16(Category);
if (intCategory> 0)
{
AccessDataSource1.SelectCommand = "SELECT * FROM [CategoryTable] WHERE ([Category] = ?)";
}
else
{
AccessDataSource1.SelectCommand = "SELECT * FROM [CategoryTable]";
}
}
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
var Region = DropDownList2.SelectedValue;
int intRegion = Convert.ToInt16(Region);
if (intRegion > 0)
{
AccessDataSource1.SelectCommand = "SELECT * FROM [RegionTable] WHERE ([Region] = ?)";
//Response.Write(intRegion);
}
else
{
AccessDataSource1.SelectCommand = "SELECT * FROM [RegionTable]";
}
}