[英]asp.net gridview paging and sorting with linq to sql custom linq statement
好吧,我知道這真的很難,但我很難找到任何信息。 我在頁面上有一個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();
}
由於您使用的是帶有GYTDataContext
LINQ-to-SQL,為什么不使用LinqDataSource
來填充Gridview?
LinqDataSource
可以自動處理分頁和排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.