C# 是否筛选ASP.NET ObjectDataSource?
我在标准ASP.NET WebForm中有一个ObjectDataSource,它只需加载用户正在查看的页面所需的数据,就可以进行有效的分页。我现在想过滤特定列的结果(比如说客户列),你会怎么做C# 是否筛选ASP.NET ObjectDataSource?,c#,asp.net,filter,webforms,objectdatasource,C#,Asp.net,Filter,Webforms,Objectdatasource,我在标准ASP.NET WebForm中有一个ObjectDataSource,它只需加载用户正在查看的页面所需的数据,就可以进行有效的分页。我现在想过滤特定列的结果(比如说客户列),你会怎么做 <asp:ObjectDataSource ID="ticketsDataSource" runat="server" SelectMethod="GetTicketsData" EnablePaging="true" MaximumRowsParameterNam
<asp:ObjectDataSource ID="ticketsDataSource" runat="server"
SelectMethod="GetTicketsData" EnablePaging="true"
MaximumRowsParameterName="pageSize"
StartRowIndexParameterName="startRowIndex"
TypeName="SupportSystem.App_Code.TicketsDataSource" SelectCountMethod="TotalRowCount">
<SelectParameters>
<asp:Parameter Name="startRowIndex" Type="Int32" />
<asp:Parameter Name="pageSize" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
我以前在代码隐藏中做的一切如下所示,但这意味着一旦添加了大量票据,网格在分页等时会非常慢,因为它在渲染等之前加载所有数据
DataSet ds = new DataSet();
Dictionary<string, object> d = new Dictionary<string, object>();
d.Add("@params", "");
ds.ReadXml(new System.IO.StringReader(Database.DAL_XML("Usp_Fetch_Tickets", d).OuterXml));
if (Database_error(ds))
{
return;
}
var dv = ds.Tables[0].DefaultView;
dv.RowFilter = "Customer LIKE '%abc%'";
var newDS = new DataSet();
var newDT = dv.ToTable();
newDS.Tables.Add(newDT);
gvTickets.DataSource = newDS;
gvTickets.DataBind();
DataSet ds=新数据集();
字典d=新字典();
d、 添加(“@params”,”);
ReadXml(newsystem.IO.StringReader(Database.DAL_XML(“Usp_Fetch_Tickets”,d.OuterXml));
如果(数据库错误(ds))
{
返回;
}
var dv=ds.Tables[0].DefaultView;
dv.RowFilter=“像“%abc%”这样的客户”;
var newDS=新数据集();
var newDT=dv.ToTable();
newDS.Tables.Add(newDT);
gvTickets.DataSource=newDS;
gvTickets.DataBind();
关于如何有效过滤ObjectDataSource有什么想法吗?您可以使用标记中的
FilterParameters
属性,然后指定参数
子类之一。例如,假设您有一个文本框
,供用户输入客户名称以按该客户筛选结果,您将需要为此使用控制参数
<asp:ObjectDataSource>
<FilterParameters>
<asp:ControlParameter ControlID="txtCustomer" PropertyName="Text" Name="customerName" />
</FilterParameters>
</asp:ObjectDataSource>
此处
txtCustomer
将是文本框的ID
,Text
是该控件的属性,用于从中获取输入值,customerName
是GetTicketsData
方法中的一个参数,您需要公开该参数才能传入筛选值可以使用filtereexpression
。下面是如何实现这一点的示例代码段
<asp:objectdatasource
id="ObjectDataSource1"
runat="server"
selectmethod="GetAllEmployeesAsDataSet"
typename="Samples.AspNet.CS.EmployeeLogic"
filterexpression="FullName='{0}'" OnFiltering="ObjectDataSource1_Filtering">
<filterparameters>
<asp:formparameter name="FullName" formfield="Textbox1" defaultvalue="Nancy Davolio" />
</filterparameters>
</asp:objectdatasource>
谢谢,这看起来很棒,如果我想要多个过滤器,我可以使用{1}{2}等,并指定更多的asp:formparameter?是的,你是对的。如果这有助于您将其标记为已回答。幸运的是,这不是Sql注入的主题吗?是否有一种方法可以使用安全参数(使用@myparam…)进行用户筛选?