asp.net gridview的分页和LINQ to SQL的定制LINQ语句排序 [英] asp.net gridview paging and sorting with linq to sql custom linq statement
问题描述
好吧,我知道这真的不能那么难,但无法找到任何信息,IM。我有我与基于用户选择的日期范围内的数据填充页面上的GridView(下拉列表)。当用户点击该按钮我填的是GridView和显示。这是使用LINQ到SQL全部完成。我需要impliment分页和排序为好。请帮助!!!下面是我的按钮单击事件......我愿意接受任何建议,得到这个工作。
保护无效btnGenerate_Click(对象发件人,EventArgs的发送)
{
INT DATERANGE = 0;
如果(rbDateList.Checked)
{
开关(ddlDateRange.SelectedIndex)
{
情况下0:
DATERANGE = 30;
打破;
情况1:
DATERANGE = 60;
打破;
案例2:
DATERANGE = 90;
打破;
默认:
DATERANGE = 30;
打破;
}
}
GYTDataContext GT =新GYTDataContext();
VAR productList的=从o在gt.PurchaseOrderDetails
加入p在gt.Products上o.ProductId等于p.ProductId
加入h本gt.PurchaseOrderHeaders上o.PurchaseOrderId等于h.PurchaseOrderId
其中,h.OrderDate> DateTime.Now.AddDays(-dateRange)
O组由o.ProductId到orderedItems
新选择
{
orderedItems.Key,
QuantityOrdered = orderedItems.Sum(S => s.OrderQuantity)
};
VAR totalOrderInfo来自中,p = productList的
加入gt.Products PROD
在p.Key等于prod.ProductId
新选择
{
prod.Reference,
单价= prod.Price,
prod.ManufacturerProductId,
p.QuantityOrdered,
TOTALCOST = prod.Price * Convert.ToInt32(p.QuantityOrdered)
}; gvOrderReport.DataSource = totalOrderInfo;
gvOrderReport.DataBind();
gvOrderReport.Visible = TRUE;
我有同样的问题,因为你。
使用LinqDataSource的大多数例子中,ilustare的WhereParameters> controlparameter功能,这是很酷,但不是那么强大。
答案很简单:
使用的LinqDataSource,只是落实onselecting事件传你希望的任何类型的数据。
下面是完整的滤波分页排序功能的简短的例子
(也注意到,人口SQL是最佳的,唯一的请求前10条记录每次)
ASPX:
< ASP:文本框ID =txtLastName=服务器>< / ASP:文本框>
< ASP:按钮的ID =btnFilter=服务器文本=过滤器
的onclick =btnFilter_Click/>< ASP:使用LinqDataSource ID =LinqDataSource1=服务器
onselecting =LinqDataSource1_Selecting>
< / ASP:使用LinqDataSource>< ASP:GridView控件ID =GridView1=服务器AllowPaging =真
AllowSorting =真的AutoGenerateColumns =FALSE的DataSourceID =LinqDataSource1>
<柱体和GT;
< ASP:BoundField的数据字段=名字的HeaderText =姓只读=真
SORTEX pression =名字/>
< ASP:BoundField的数据字段=中间名的HeaderText =中间名只读=真
SORTEX pression =中间名/>
< ASP:BoundField的数据字段=姓氏的HeaderText =姓氏只读=真
SORTEX pression =姓氏/>
< /专栏>
< / ASP:GridView的>
codeBEHIND:
保护无效LinqDataSource1_Selecting(对象发件人,LinqDataSourceSelectEventArgs E)
{
VAR CTX =新LinqDataSource.DBDataContext();
IQueryable的<客户>客户= ctx.Customers; 如果(!String.IsNullOrEmpty(txtLastName.Text))
客户= customers.Where(C => c.LastName.Contains(txtLastName.Text)); e.Result =客户;
} 保护无效btnFilter_Click(对象发件人,EventArgs的发送)
{
GridView1.DataBind();
}
Ok, I know this cant really be that hard, but im having trouble finding any info. I have a gridview on the page that i am filling with data based on a user selected date range(a dropdown list). When the user clicks the button i fill the gridview and display it. This is all done using Linq to Sql. I need to impliment paging and sorting as well. Help PLEASE!!! Below is my button click event... i am open to any suggestions to get this working
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;
I had the same problem as you. Most examples of linqdatasource, ilustare the WhereParameters > controlparameter functionality which is cool but not that powerful.
The answer is simple: Use a LinqDataSource and just implement the "onselecting" event pass whatever kind of data you wish.
Here is a short example with full filtering-paging-ordering capabilities (also note that the populated sql is optimal and only requests top 10 records every time)
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>
CODEBEHIND:
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();
}
这篇关于asp.net gridview的分页和LINQ to SQL的定制LINQ语句排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!