C# 使用linq到sql自定义linq语句的asp.net gridview分页和排序
好的,我知道这不可能真的那么难,但我找不到任何信息。我在页面上有一个gridview,根据用户选择的日期范围(下拉列表)填充数据。当用户单击按钮时,我填充gridview并显示它。这一切都是使用LINQtoSQL完成的。我还需要实现分页和排序。请帮忙!!!下面是我的按钮点击事件。。。我愿意接受任何建议,让这项工作C# 使用linq到sql自定义linq语句的asp.net gridview分页和排序,c#,asp.net,linq-to-sql,gridview,C#,Asp.net,Linq To Sql,Gridview,好的,我知道这不可能真的那么难,但我找不到任何信息。我在页面上有一个gridview,根据用户选择的日期范围(下拉列表)填充数据。当用户单击按钮时,我填充gridview并显示它。这一切都是使用LINQtoSQL完成的。我还需要实现分页和排序。请帮忙!!!下面是我的按钮点击事件。。。我愿意接受任何建议,让这项工作 protected void btnGenerate_Click(object sender, EventArgs e) { int dateRange =
protected void btnGenerate_Click(object sender, EventArgs e)
{
int dateRange =0;
if (rbDateList.Checked)
{
switch (ddlDateRange.SelectedIndex)
{
case 0:
dateRange = 30;
break;
case 1:
dateRange = 60;
break;
case 2:
dateRange = 90;
break;
default:
dateRange = 30;
break;
}
}
GYTDataContext gt = new GYTDataContext();
var productList = from o in gt.PurchaseOrderDetails
join p in gt.Products on o.ProductId equals p.ProductId
join h in gt.PurchaseOrderHeaders on o.PurchaseOrderId equals h.PurchaseOrderId
where h.OrderDate>DateTime.Now.AddDays(-dateRange)
group o by o.ProductId into orderedItems
select new
{
orderedItems.Key,
QuantityOrdered = orderedItems.Sum(s => s.OrderQuantity)
};
var totalOrderInfo = from p in productList
join prod in gt.Products
on p.Key equals prod.ProductId
select new
{
prod.Reference,
UnitPrice = prod.Price,
prod.ManufacturerProductId,
p.QuantityOrdered,
TotalCost = prod.Price * Convert.ToInt32(p.QuantityOrdered)
};
gvOrderReport.DataSource = totalOrderInfo;
gvOrderReport.DataBind();
gvOrderReport.Visible = true;
既然您正在使用带有
GYTDataContext
的linqtosql,为什么不使用LinqDataSource
来填充Gridview呢
LinqDataSource
可以自动处理分页和排序
我和你有同样的问题。 linqdatasource、ILUST的大多数示例都是WhereParameters>controlparameter功能,虽然很酷,但没有那么强大 答案很简单: 使用LinqDataSource,只需实现“onselecting”事件即可传递任何类型的数据 下面是一个具有完整筛选分页排序功能的简短示例 (还要注意,填充的sql是最佳的,每次只请求前10条记录) ASPX:
<asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
<asp:Button ID="btnFilter" runat="server" Text="Filter"
onclick="btnFilter_Click"/>
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
onselecting="LinqDataSource1_Selecting">
</asp:LinqDataSource>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False" DataSourceID="LinqDataSource1">
<Columns>
<asp:BoundField DataField="FirstName" HeaderText="FirstName" ReadOnly="True"
SortExpression="FirstName" />
<asp:BoundField DataField="MiddleName" HeaderText="MiddleName" ReadOnly="True"
SortExpression="MiddleName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" ReadOnly="True"
SortExpression="LastName" />
</Columns>
</asp:GridView>
代码隐藏:
protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
var ctx = new LinqDataSource.DBDataContext();
IQueryable<Customer> customers = ctx.Customers;
if (!String.IsNullOrEmpty(txtLastName.Text))
customers = customers.Where ( c => c.LastName.Contains(txtLastName.Text));
e.Result = customers;
}
protected void btnFilter_Click(object sender, EventArgs e)
{
GridView1.DataBind();
}
protectedvoid LinqDataSource1\u选择(对象发送方,LinqDataSourceSelectEventArgs e)
{
var ctx=new LinqDataSource.DBDataContext();
IQueryable客户=ctx.客户;
如果(!String.IsNullOrEmpty(txtLastName.Text))
customers=customers.Where(c=>c.LastName.Contains(txtLastName.Text));
e、 结果=客户;
}
受保护的无效btnFilter\u单击(对象发送方,事件参数e)
{
GridView1.DataBind();
}
我在使用任一数据源(linqdatasource或objectdatasource)时遇到两个问题。问题1是如何创建一个像im using这样的查询,以便在数据源中使用,也许有一个更简短或更直接的方法来描述im试图做的事情。问题二是如何处理单击事件