我想使用下拉列表过滤我的GridView
,以便仅显示与所选下拉项相关的结果。我发现了很多Sql Datasource的例子,但我使用的是ObjectDataSource。
这是我的GridView
和Dropdown
<asp:DropDownList ID="DropDownList2" runat="server" >
<asp:ListItem Text="Person1" Value="Name"></asp:ListItem>
<asp:ListItem Text="Person2" Value="Name"></asp:ListItem>
<asp:ListItem Text="Person3" Value="Name"></asp:ListItem>
<asp:ListItem Text="Person4" Value="Name"></asp:ListItem>
</asp:DropdownList>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnPageIndexChanging="GridView1_PageIndexChanging" DataSourceID="ObjectDataSource1" >
<PagerSettings Mode="NumericFirstLast" FirstPageText="First" LastPageText="Last" PageButtonCount="30" />
<PagerStyle CssClass="Pager" Font-Size="Large" Height="50px"/>
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" SortExpression="" >
<HeaderStyle Width="45%" />
<ItemStyle HorizontalAlign="Center" Height="85px" Width="40%" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" />
</asp:BoundField>
<asp:BoundField DataField="Job" HeaderText="Department" ReadOnly="True" SortExpression="" >
<ItemStyle Width="30%" HorizontalAlign="Center" Height="85px" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" />
</asp:BoundField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="Names" SelectMethod="NamesData" />
所以我希望如果用户从下拉列表中选择Person1,GridView将只显示这些结果。任何建议都表示赞赏!
更新
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
ObjectDataSource1.FilterExpression = "Person=" + DropDownList2.SelectedValue;
}
我已尝试过此操作但收到以下错误:
System.Data.SyntaxErrorException:语法错误:&#39; Person&#39;之后缺少操作数操作
答案 0 :(得分:1)
为了过滤记录,显然需要在NamesData
进行第一次更改,以便接受参数并返回过滤后的记录。
接下来,在ObjectDataSource控件中添加带SelectParameters
标记的参数,如下所示: -
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="Names"
SelectMethod="NamesData">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList2" DefaultValue=""
Name="personName" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
此处,personName
是您要添加到NamesData
方法的参数的名称。此外,您必须相应地设置DefaultValue
,以便您可以在初始页面加载中查看所有记录。