ObjectDataSourc用法之二(過濾)
1. 准備條件
參數:ObjectDataSource用法之一(SelectMethod來進行簡單的邦定)
2. 在業務處理類中添加如下方法
public DataSet FilterItems()
{
System.Xml.XmlTextReader xr = new XmlTextReader(_path);
DataSet ds = new DataSet();
ds.ReadXml(xr);
return ds;
}
3. 在aspx頁面中添加內容
<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="FilterItems" FilterExpression="UID='{0}' or Email='{1}'" TypeName="Member">
<FilterParameters>
<asp:Parameter Name="UID" DefaultValue="bruce" />
<asp:FormParameter Name="Email" FormField="txtEmail" DefaultValue="maxlimin@maxense.com" />
</FilterParameters>
</asp:ObjectDataSource>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="ObjectDataSource1">
<Columns>
<asp:BoundField DataField="UID" HeaderText="UID" SortExpression="UID" />
<asp:BoundField DataField="PWD" HeaderText="PWD" SortExpression="PWD" />
<asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
</Columns>
</asp:GridView>
說明:SelectMethod這個方法就不用說了; FilterExpression的值為一個查詢表達式,格式如:
屬性 表達式 格式化字串
屬性為SelectMethod返回結果集中的對應的欄位名稱(我們可以解成在表的欄位名稱或對象的屬性)…
表達式為=、>=、<=、!=等等
格式化之符串為{0}、{1}、{2}等
多個表過式之前使用and 或 or 來過行連接……其實說白了就跟SQL語句一樣
至於這裏面的{0}、{1}、{2}的值怎麼來的呢……我們可以通過FilterParameters來進行指定,註意上面的asp: FormParameter的作用是表示將這個輸入參數與指定的表單進行邦定,如上我就是將電子郵件這個欄位與一個TextBox進行邦定了,那麼只要將這個TextBox的值改變時就是重新進行篩選了…當然我們還可以通過後端代碼來進行邦定了如下
ObjectDataSource1.FilterParameters.Clear();
ObjectDataSource1.FilterParameters.Add("UID", "henry");
ObjectDataSource1.FilterParameters.Add("Email", "maxlimin@maxense.com");
這裏有一點需要註冊的就是,如我將上面的代碼改改
ObjectDataSource1.FilterParameters.Clear();
ObjectDataSource1.FilterParameters.Add("", "henry");
ObjectDataSource1.FilterParameters.Add("", "maxlimin@maxense.com");
所得到的結果都是一樣了,這裏只認順序不認名稱的,也就是說{0}對應的就是集合中的第一個參數{1}對應的就是集合中的第二個參數了……所以說上面的
<FilterParameters>
<asp:Parameter Name="UID" DefaultValue="bruce" />
<asp:FormParameter Name="Email" FormField="txtEmail" DefaultValue="maxlimin@maxense.com" />
</FilterParameters>
這個代碼,我們也要註冊它的順序了,切記不可將順序搞混了……
這裏需要重點提一下的就是:當我們為ObjectDataSource使用了FilterExpression參數時,那麼SelectMethod參數所對應的方法的返回結果必須是DataSet或者是DataTable. 還有一點就是過濾的意思就是在DataSet或DataTable邦定到GridView時按欄位進行篩選顯示,並不是數據層次的篩選而是內存中的篩選了……