如何解决asp.net gridview分页并使用linq到sql自定义linq语句进行排序
| 好的,我知道这真的很难,但是我无法找到任何信息。我在页面上有一个gridview,我正在根据用户选择的日期范围(下拉列表)填充数据。当用户单击按钮时,我将填充并显示gridview。全部使用Linq to Sql完成。我还需要暗示分页和排序。请帮助!!!以下是我的按钮点击事件...我愿意接受任何建议以使此工作正常进行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;
解决方法
我和你有同样的问题。
linqdatasource的大多数示例都只是“ 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();
}
,由于您正在使用带有3的LINQ-to-SQL,为什么不使用ѭ4来填充Gridview?
LinqDataSource
可以自动处理分页和排序。
http://msdn.microsoft.com/zh-CN/library/bb547113.aspx
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。