2009-12-08 4 views
0

도움이 필요합니다. 현재 서클을 돌고 있습니다.Gridview sort는 예상보다 훨씬 더 밝힙니다!

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(); 
     } 
    } 
} 

GetMaterialData 코드는 다음과 같습니다 :

내가 선택한 라디오 버튼 항목에 따라 채워지는 gridview에있는이가 첫 번째 인스턴스에서 실행

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

을,이 실행 절대적으로 멋지다. 그리고 멋진 페이징을 ... lovely.

그러나 gridview를 정렬하려고하면 데이터가 변경되어 해당 데이터 소스의 모든 데이터 세트로 돌아갑니다.

다음은 HTML & C# 코드가있는 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(); 

    } 

누구나 내가있는 gridview 정렬 할 때, 원래의 viewstate가 유지되도록 할 수있는 방법 어떤 아이디어가?

+0

정렬을 적용 할 때 데이터 소스를 다시 적용 해 보셨습니까? 죄송합니다. 답변이 아니라 댓글이어야합니다. –

답변

0

사용자가 radTopx 또는 txtbxHowMany를 사용하여 작업을 완료했는지 확인하려면 GridView1_PageIndexChanging 및 GridView1_Sorting 함수를 모두 확인해야합니다. 그렇다면 GetMaterialData()의 반환 값을 사용하고 그렇지 않으면 "lqPackWeights"의 DataSourceID를 사용합니다.

필요한 모든 것을 갖추고 있으므로 발생할 수있는 다양한 상황을 모두 처리하는 데 약간의 코드가 필요합니다.

관련 문제