2015-12-02 83 views
0

我想用下拉列表過濾我的GridView,以便僅顯示與所選下拉項目相關的結果。我發現了很多Sql Datasource的例子,但是我使用的是ObjectDataSource。使用下拉列表過濾GridView

這是代碼爲我GridViewDropdown

<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控件將只顯示那些結果。任何建議表示讚賞!

UPDATE

protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    ObjectDataSource1.FilterExpression = "Person=" + DropDownList2.SelectedValue; 
    } 

我已經試過,但我得到了以下錯誤:

System.Data.SyntaxErrorException: Syntax error: Missing operand after 'Person' operator.

+1

[ObjectDataSource](https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.filterexpression(v = vs.110).aspx)有一個「FilterExpression」字符串屬性。你可以簡單地在'DropDownList'的'SelectedIndexChanged'事件中設置它嗎?就像'ods.FilterExpression =「Name =」+ ddl.SelectedValue;' – sab669

+0

是的我試過了,但似乎沒有發生任何事 – MariaL

+0

分享你的實際代碼。 ASP標記是偉大的,所有人都知道頁面的樣子,但沒有看到你如何配置過濾器表達式,更新網格等我們在這裏黑暗中 – sab669

回答

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,以便您可以在初始頁面加載中查看所有記錄。