我有这个列表视图从本地db获取数据,并且有一个DropDownList来按类型过滤asp:list视图中的项目。我是用巫师做的。
我绑定它们之后。它只能通过过滤器显示项目。但是,当我想要两个选项时,我无法显示所有项目。
所以我决定将自己绑定在代码后面,我无法得到任何结果,这是我的代码在下拉列表索引更改事件中:
protected void BookListddl_SelectedIndexChanged(object sender, EventArgs e)
{
if (BookListddl.SelectedIndex == 0)
{
SqlDataSource dataSource = new SqlDataSource(ConfigurationManager.ConnectionStrings[0].ConnectionString
, "SELECT * FROM BookTbl");
dataSource.SelectCommandType = SqlDataSourceCommandType.Text;
dataSource.SelectCommand = "SELECT * FROM BookTbl";
dataSource.DataBind();
ListView1.DataSourceID = dataSource.ID;
ListView1.DataBind();
}
else
{
SqlDataSource dataSource = new SqlDataSource(ConfigurationManager.ConnectionStrings[0].ConnectionString
, "SELECT * FROM [BookTbl] WHERE [TypeId] = '" + BookListddl.SelectedValue + "'");
dataSource.SelectCommandType = SqlDataSourceCommandType.Text;
dataSource.SelectCommand = "SELECT * FROM [BookTbl] WHERE [TypeId] = '" + BookListddl.SelectedValue + "'";
dataSource.DataBind();
ListView1.DataSourceID = dataSource.ID;
ListView1.DataBind();
}
答案 0 :(得分:3)
如果您使用 SqlDataSource ,最简单的方法是在前面绑定数据。
注意:我将 TypeId 创建为整数。
如果DropDownList的所选值为-1 , SqlDataSource 将返回所有项目。
<asp:DropDownList ID="BookListddl" runat="server" AutoPostBack="True">
<asp:ListItem Text="All" Value="-1" />
<asp:ListItem Text="Fiction" Value="1" />
<asp:ListItem Text="None Fiction" Value="2" />
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [BookTbl] WHERE [TypeId] = @TypeId OR @TypeId = -1">
<SelectParameters>
<asp:ControlParameter ControlID="BookListddl"
PropertyName="SelectedValue"
Name="TypeId"
Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>