2009-12-24 6 views
0

salutations de saison à vous tous. J'ai vraiment besoin d'aide car cela me rend fou.Gridview Tri, mise à jour et édition

Le but. J'ai une boîte de texte dans laquelle un client entre un nombre, ils cliquent sur une liste de bouton radio pour sélectionner un matériel et frappent un bouton pour peupler un gridview.

Voici le code final avant:

<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> 

Et voici le code derrière:

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) 
    { 

    } 

} 

Maintenant, je sais que je dois remplir l'événement de tri mais je l'ai essayé tellement de combinaisons, Je me suis dans un bon pickle (d'où le nul!).

Je suppose que j'aurai des difficultés en tant que linq qu'il utilise pour remplir le gridview en utilisant take afin que les données puissent être perdues lorsque le tri est exécuté. Est-ce que quelqu'un peut me diriger dans la bonne direction et comment je peux y parvenir?

De même, je sais que je vais rencontrer des problèmes similaires avec le rowupdating et rowediting donc si je peux avoir des suggestions pour atteindre les résultats souhaités, je serais très reconnaissant ... en fait, vous êtes invités à me joindre pour une boisson festive à mon local !

Répondre

0

Je ne suis pas totalement sûr de ce que vous essayez de faire, mais généralement, un gestionnaire de tri est utilisé pour trier les colonnes dans une grille. Vous pouvez faire référence à cet exemple de code ci-dessous, dans lequel je gère le tri par ordre croissant ou décroissant, ainsi que la mise en cache afin de ne pas avoir à réapparaître dans la base de données lors du tri par colonne.

Mais en général, vous souhaitez mettre à jour la source de données pour la vue de la grille et la relier avec le résultat trié.

/// <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); 
} 
Questions connexes