Hello all - seasons greetings to you all. I really need some help as this is driving me mad.
The aim. I have a textbox which a client enters a number, they click on a radio button list to select a material and hit a button to populate a gridview.
This is the front end code:
<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>
And this is the code behind:
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)
{
}
}
Now I know I have to populate the sorting event but I have tried sooo many combinations, I have got myself in a right pickle (hence the null!).
I suspect I will have difficulty as the linq that it is using to populate the gridview is using take so the data might be lost when the sorting is run.
Can someone please point me in the right direction and how I can achieve this? Similarly, I know I will encounter similar problems with the rowupdating and rowediting so if I can have suggests for achieving the desired results, I would be most grateful...in fact, you are welcome to join me for a festive drink at my local!