сезонов привет всем вам. Мне действительно нужна помощь, потому что это сводит меня с ума.
Цель. У меня есть текстовое поле, в которое клиент вводит число, они щелкают по списку переключателей, чтобы выбрать материал, и нажимают кнопку, чтобы заполнить сетку.
Это код переднего конца:
<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)
{
}
}
Теперь я знаю, что должен заполнить событие сортировки, но я попробовал ооочень много комбинаций, я попал в правильный рассол (отсюда ноль!).
Я подозреваю, что у меня будут трудности, так как linq, который он использует для заполнения вида сетки, использует take, чтобы данные могли быть потеряны при запуске сортировки.
Может ли кто-нибудь указать мне правильное направление и как я могу этого достичь? Точно так же я знаю, что столкнусь с подобными проблемами с обновлением строк и редактированием строк, поэтому, если у меня есть предложения для достижения желаемых результатов, я был бы очень признателен ... на самом деле, вы можете присоединиться ко мне для праздничного напитка в моем местном !