2011-10-15 2 views
2

여기 gridview를 정렬하는 중 오류가 발생합니다.'System.Collections.Generic.List'형식의 개체를 캐스팅 할 수 없습니다. 'System.Data.DataSet'을 입력하십시오.

Unable to cast object of type System.Collections.Generic.List`1[<>f__AnonymousType5`8[System.Int32,System.String,System.Int32,System.Double,System.Int32,System.Double,System.Int32,System.Double]]' to type 'System.Data.DataSet' 

2) VAR 결과의 데이터 유형은 무엇 또 다른 질문 : 내 데이터 소스 내가 LINQ 쿼리를 통해

protected void Page_Load(object sender, EventArgs e) 
{ 
    dt1 = obj1.Table1data().Tables[0]; 
    dt2 = obj1.Table2data().Tables[0]; 
    dt3 = obj1.Table3data().Tables[0]; 

    var results = (
     from table1 in dt1.AsEnumerable() 
     join table2 in dt2.AsEnumerable() on (int)table1["id"] equals (int)table2["id"] 
     join table3 in dt3.AsEnumerable() on (int)table1["id"] equals (int)table3["id"] 

     select new 
     { 
      id = (int)table1["id"], 
      S1= (int)table1["S1"], 
      P1= (double)table1["P1"], 
      P2= (int)table2["P2"], 
      P3= (double)table2["P3"], 
      P4 = (int)table3["P4"], 
      P5= (double)table3["P5"], 

     }).ToList(); 

    Session["ds"] = results; 
    GridView1.DataSource = results; 
    GridView1.DataBind(); 
} 

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    DataSet dataSet = (DataSet)Session["ds"]; 
    DataTable dataTable = dataSet.Tables[0]; 

    if (dataTable != null) 
    { 
     DataView dataView = new DataView(dataTable); 
     dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection); 

     GridView1.DataSource = dataView; 
     GridView1.DataBind(); 
    } 
} 

// here in the GridView1_sorting at DataSet dataSet = (DataSet)Session["ds"], I am getting an error 

오류가 오전 VAR 결과입니다. 감사 일

답변

3

Session["ds"]var results을 보유하고 있으며 'A 컴파일러에 의해 생성 된 익명 형식입니다 resultsList<'A>입니다. 이것을 DataSet으로 전송할 수 없습니다. 이 세션을 세션에 넣고 나중에 검색하려면 적절한 클래스를 선언하십시오. 그러면 목록을 Session에 쉽게 넣을 수 있습니다.

내 말은 쿼리 때문에 select 문이 일반적으로 괜찮

select new 
{ 

의 익명의 유형을 구축하고있다,하지만 당신은 넣어 바로 지역의 범위를 넘어이 결과를 사용하려는 것입니다 세션으로. 해당 데이터를 보유 할 적절한 클래스를 작성해야합니다. 올바른 특성을 부여하십시오.

public class MyData 
{ 
     // give it the appropriate properties you need 
     public int ID { get; set; } 
     public int S1 { get; set; } 
     public double P1 { get; set; } 
     public int P2 { get; set; } 
     public double P3 { get; set; } 
     public int P4 { get; set; } 
     public double P5 { get; set; } 
     // by the way... you should really come up with better names 
     // for these properties! 
} 

그리고 다음은 쿼리

select new MyData 
{ 

을 그리고 당신은 ToList()하고 결과를 호출 할 때, 당신은 List<MyData>있을 것이다. 따라서 세션에서이 값을 가져 오려고하면이 값을 캐스팅합니다.

var list = (List<MyData>)Session["ds"]; 
+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 그러나 내가 어떻게 정렬을 제안 할 수 있습니다. 목록에 정렬을 구현해야합니까? 이러한 특성 무작위 이름입니다; I은 무효 GridView1_Sorting (개체를 보낸 사람, GridViewSortEventArgs 전자) 는 {.... ..... 이 var에 목록 = (목록 ) 세션 [ "DS를"]} 보호 의미 나는이 지위에있다. – user575219

+0

정렬 식을 확인한 다음 Linq'OrderBy' 메서드를 사용할 수 있습니다. 예를 들어,'var query = list.AsEnumerable(); if (e.SortExpression == "ID") {query = query.OrderBy (item => item.ID); }'더 많은 아이디어를 얻기 위해 객체의 목록으로 정렬 gridviews를 검색하십시오. –

관련 문제