目标。我有一个文本框,客户输入一个数字,他们点击一个单选按钮列表来选择一个材料,然后按一个按钮来填充一个网格视图。
这是前端代码:
<asp:TextBox ID="tbxHowMany" runat="server"
style="z-index: 1; left: 300px; top: 250px; position: absolute"></asp:TextBox>
<asp:Button ID="btnDisplayTopReport" runat="server"
style="z-index: 1; left: 645px; top: 285px; position: absolute; height: 25px; width: 170px"
Text="Display TOP Report" onclick="btnDisplayTopReport_Click" />
<asp:RadioButtonList ID="radTOP" runat="server"
style="z-index: 1; left: 575px; top: 180px; position: absolute; height: 177px; width: 86px">
<asp:ListItem>Paper</asp:ListItem>
<asp:ListItem>Glass</asp:ListItem>
<asp:ListItem>Aluminium</asp:ListItem>
<asp:ListItem>Steel</asp:ListItem>
<asp:ListItem>Plastic</asp:ListItem>
<asp:ListItem>Wood</asp:ListItem>
<asp:ListItem>Other</asp:ListItem>
</asp:RadioButtonList>
<asp:LinqDataSource ID="LQTOPReportDS" runat="server"
ContextTypeName="CompleteWeightsDataContext"
EnableUpdate="True" TableName="tblOnlineReportingCOMPLETEWeights"
Where="IDDesc == @IDDesc && UnitUserfield1 == @UnitUserfield1 && UnitUserfield2 == @UnitUserfield2 && MaterialLevel == @MaterialLevel"
OrderBy="UnitId, MaterialLevel, MaterialText, UnitWeight"
StoreOriginalValuesInViewState="True">
</asp:LinqDataSource>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False" CellPadding="4"
DataKeyNames="PriKey" DataSourceID="LQTOPReportDS" ForeColor="#333333"
GridLines="None" Font-Size="X-Small"
style="z-index: 1; left: 5px; top: 375px; position: absolute; height: 133px; width: 187px"
onpageindexchanging="GridView1_PageIndexChanging"
onrowediting="GridView1_RowEditing" onrowupdating="GridView1_RowUpdating"
onsorting="GridView1_Sorting">
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:BoundField DataField="UnitId" HeaderText="UnitId"
SortExpression="UnitId" />
<asp:BoundField DataField="UnitDescription" HeaderText="UnitDescription"
SortExpression="UnitDescription" />
<asp:BoundField DataField="PackagingGroupId" HeaderText="PackagingGroupId"
SortExpression="PackagingGroupId" />
<asp:CheckBoxField DataField="IsPackagingGroup" HeaderText="IsPackagingGroup"
SortExpression="IsPackagingGroup" />
<asp:BoundField DataField="PackagingTypeCode" HeaderText="PackagingTypeCode"
SortExpression="PackagingTypeCode" />
<asp:BoundField DataField="UnitWeight" HeaderText="UnitWeight"
SortExpression="UnitWeight" />
<asp:BoundField DataField="WeightUnitCode" HeaderText="WeightUnitCode"
SortExpression="WeightUnitCode" />
<asp:BoundField DataField="MaterialLevel" HeaderText="MaterialLevel"
SortExpression="MaterialLevel" />
<asp:BoundField DataField="MaterialText" HeaderText="MaterialText"
SortExpression="MaterialText" />
<asp:BoundField DataField="ProductPercentage" HeaderText="ProductPercentage"
SortExpression="ProductPercentage" />
<asp:BoundField DataField="UnitUserfield2" HeaderText="UnitUserfield2"
SortExpression="UnitUserfield2" />
<asp:BoundField DataField="Comment" HeaderText="Comment"
SortExpression="Comment" />
</Columns>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
这就是背后的代码:
public partial class TOP : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["MemberKey"] = "FM00012";
GridView1.DataSourceID = null;
GridView1.DataBind();
}
}
private object GetMaterialData(string MemberKey, string MaterialType, string MaterialLevel, int Count)
{
CompleteWeightsDataContext db = new CompleteWeightsDataContext();
var query = db.tblOnlineReportingCOMPLETEWeights
.Where(x => x.MemberId == MemberKey && x.MaterialText == MaterialType && x.MaterialLevel == MaterialLevel)
.OrderByDescending(x => x.ProductPercentage)
.Take(Count);
return query;
}
protected void btnDisplayTopReport_Click(object sender, EventArgs e)
{
GridView1.DataSourceID = null;
GridView1.DataBind();
if (radTOP.SelectedValue == "" || tbxHowMany.Text == "")
{
MessageBox.Show("Please Ensure that BOTH 'The Number of Products' and Appropriate material Is selected Before You Attempt To Run a TOP X Report", "Top X Error!!!",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
GridView1.DataSourceID = null;
GridView1.DataBind();
}
else
{
int max = 0;
if (int.TryParse(tbxHowMany.Text, out max))
{
GridView1.DataSource = GetMaterialData(Session["MemberKey"].ToString(), radTOP.SelectedItem.Value, "Primary", max);
GridView1.DataBind();
}
}
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
}
}
现在我知道我必须填充排序事件,但我尝试了很多组合,我已经让自己处于正确的泡菜中(因此无效!)。
我怀疑我会遇到困难,因为它用来填充gridview的linq正在使用take,因此在运行排序时数据可能会丢失。
有人可以指出我正确的方向以及如何实现这一目标吗?同样地,我知道我会遇到类似排序和划船的问题,所以如果我可以建议达到预期效果,我会非常感激...事实上,欢迎你和我一起去当地享用一杯节日饮料。 !
答案 0 :(得分:0)
我不完全确定你要做什么,但通常,排序处理程序用于对gridview中的列进行排序。您可以参考下面的示例代码,我在其中通过升序或降序处理排序,以及缓存,因此当按列排序时,我不必再次访问数据库。
但一般来说,您希望更新网格视图的数据源并使用排序结果重新绑定它。
/// <summary>
/// <para>Event handler for sorting items in the grid. It allows the user to sort by any column in the grid.
/// The method makes use of caching to reduce access to the persistence layer.</para>
/// </summary>
/// <param name="sender">The sender which triggered the event.</param>
/// <param name="e">The event arguments.</param>
protected void gvFileList_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression;
DataSet ds = (DataSet)HttpRuntime.Cache[Session.SessionID + "dsFileList"];
if (ds == null)
{
LoadGridData();
ds = (DataSet)HttpRuntime.Cache[Session.SessionID + "dsFileList"];
}
ds.Tables[0].DefaultView.Sort = e.SortExpression;
// check the cache to see if user has sorted by this column (i.e. this SortExpression)
// previously, and if they have, reverse the sort direction
if (HttpRuntime.Cache[Session.SessionID + "dsFileList" + e.SortExpression] != null)
{
// get the previous sort direction from the cache
string dir = (string)HttpRuntime.Cache[Session.SessionID + "dsFileList" + e.SortExpression];
// reverse the sort direction and update the cache
if (dir == "ASC")
{
Helper.AddToCache(Session.SessionID + "dsFileList" + e.SortExpression, "DESC", 120);
ds.Tables[0].DefaultView.Sort += " DESC";
sortExpression = e.SortExpression + " DESC";
}
else
{
Helper.AddToCache(Session.SessionID + "dsFileList" + e.SortExpression, "ASC", 120);
ds.Tables[0].DefaultView.Sort += " ASC";
sortExpression = e.SortExpression + " ASC";
}
}
else
{
// this column has not been sorted on previously, so update the cache with
// sort direction = ASC for this column since ascending is the initial
// sort direction
Helper.AddToCache(Session.SessionID + "dsFileList" + e.SortExpression, "ASC", 120);
sortExpression = e.SortExpression + " ASC";
}
gvFileList.DataSource = ds.Tables[0].DefaultView;
gvFileList.DataBind();
// store the sort expression in cache so that when the grid is refreshed by the tmTFFileList_Tick
// method, we can get the sort expression to use
Helper.AddToCache(Session.SessionID + "dsFileList.SortExpression", sortExpression, 120);
}