2009-12-08 8 views
0

J'ai besoin d'aide ici, je tourne actuellement en rond.Gridview tri révèle beaucoup plus que prévu!

J'ai un gridview qui est peuplée basée sur un élément de bouton radio sélectionné:

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 

    if (radTopx.SelectedValue == "" || txtbxHowMany.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(txtbxHowMany.Text, out max)) 
     { 

      GridView1.DataSource = this.GetMaterialData(Session["MemberKey"].ToString(), radTopx.SelectedItem.Value, "Primary", max); 
      GridView1.DataSourceID = String.Empty; 
      GridView1.DataBind(); 
     } 
    } 
} 

Lorsque le code GetMaterialData est:

private object GetMaterialData(string MemberKey, string MaterialType, string MaterialLevel, int Count) 

{ 
    ORWeightsDataClassesDataContext db = new ORWeightsDataClassesDataContext(); 
    var query = db.tblOnlineReportingCOMPLETEWeights 
       .Where(x => x.MemberId == MemberKey && x.MaterialText == MaterialType && x.MaterialLevel == MaterialLevel) 
       .OrderByDescending(x => x.ProductPercentage) 
       .Take(Count); 
    return query; 
} 

Lorsque cela est exécuté en premier lieu, cela va absolument bien et est bien paginée ... adorable. Cependant, lorsque j'essaie de trier la grille, les données changent et retournent à l'ensemble de l'ensemble de données de sa source de données.

Voici le code html & C# code derrière le gridview:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    style="z-index: 1; left: 215px; top: 560px; position: absolute; height: 133px; width: 755px; text-align: center;" 
      Font-Size="X-Small" 
      onpageindexchanging="GridView1_PageIndexChanging" onsorting="GridView1_Sorting"  
      AllowPaging="True" AllowSorting="True"> 


    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
     GridView1.PageIndex = e.NewPageIndex; 
     GridView1.DataSourceID = "lqPackWeights"; 
     GridView1.DataBind(); 

    } 

    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     GridView1.DataSourceID = "lqPackWeights"; 
     GridView1.DataBind(); 

    } 

Quelqu'un a des idées comment je peux faire en sorte que lorsque le gridview est triée, le maintien viewstate original?

+0

Avez-vous essayé d'appliquer de nouveau la source de données lorsque vous avez appliqué le tri? Désolé, cela devrait être un commentaire et non une réponse. –

Répondre

0

Vous devez vérifier vos fonctions GridView1_PageIndexChanging et GridView1_Sorting pour voir si l'utilisateur a fait quoi que ce soit avec radTopx ou txtbxHowMany. Si tel est le cas, vous utiliserez la valeur renvoyée de GetMaterialData(), sinon vous utiliserez DataSourceID de "lqPackWeights".

Donc, vous avez tout ce dont vous avez besoin, il suffit d'un peu plus de code pour gérer toutes les différentes situations qui peuvent survenir.

Questions connexes