2009-02-08 5 views
4

사용자 정의 형식의 배열 인스턴스를 (C# ADO.Net) 데이터 테이블로 변환하는 방법에 대한 샘플을 찾지 못했습니다. 데이터 테이블을 사용하여 ASP.Net 데이터에 바인딩하려고합니다. 바운드 컨트롤 (예 : gridview). 누구든지 샘플을 제공하거나 간단한 샘플을 추천 해 줄 수 있습니까?C#에서 개체 배열을 데이터 테이블로 변환

또 다른 질문은 ASP.Net의 컨트롤에 바인딩하기 위해 datatable로 변환해야하는지 여부입니다. 사용자 정의 유형 배열에 바인딩 할 수 있습니까? 사전에

덕분에, 조지

+0

'GridView1.DataSource = Array'를하고 있는데 아무것도 표시하지 않았다면 그 후에 GridView1.DataBind()를해야한다는 것에주의하십시오. – PUG

답변

3

아니, 당신은 바인딩 할 수있는 DataTable 필요하지 않습니다 - 사실, 지금은 객체를 기반으로 가장 구속력, 특히와 객체 모델이 아닌 DataTable을 생성 LINQ (). 클래스의 공용 속성 이름을 다른 열의 데이터 멤버로 사용하십시오.

+0

안녕하세요 마크, 여기에서 만나서 반갑습니다. :-) 미안 기술적이지 않은 이유로 LINQ를 사용할 수 없습니다. DataTable/DataSet을 사용하지 않는다면 다른 해결책이 있습니까? – George2

1

원하는대로하려면 ObjectDataSource 클래스를 사용하는 것이 좋습니다. 그런 다음 DataTable을 전혀 사용할 필요가 없으며 데이터 바인딩을 계속 사용할 수 있습니다. ObjectDataSource를 사용하면 사용자 정의 유형을 데이터 바인딩에 표시 할 수 있으며 유형을 얻는 방법은 중요하지 않습니다. 그게 필요하다면 데이터베이스에서 올 필요가 없습니다.

+0

내가 추천 한 링크를 읽었습니다. 현재, 내 응용 프로그램은 3 계층, ASP.Net - 웹 서비스 - 데이터베이스입니다. 링크 샘플에서 ASP.Net은 데이터 소스를 직접 쿼리하여 나의 디자인 목적에 위배되어 중간에서 투명한 데이터 액세스로 웹 서비스 레이어를 만듭니다. 의견이나 더 나은 샘플? – George2

+0

EmployeeLogic을 참조하는 예를 언급하고 있습니까? 그렇다면 GetAllEmployees() 메서드의 구현을 변경하여 SqlDataSource 대신 웹 서비스를 호출하십시오. ObjectDataSource는 모든 종류의 객체와 작동하므로 필요할 때 어디에서나 데이터를 얻을 수 있습니다. –

3

나는 동일한 요구 조건을 가지고 있었고 나는 Pauls Blog에서 좋은 기사를 발견했다. 당신은 여전히 ​​

http://weblogs.asp.net/psperanza/archive/2005/05/18/407389.aspx

여기 내 프로젝트에서 사용했던 코드를 원한다면 다음 링크에 모습을 가질 수 있습니다. 그 코멘트에 관해서

Public Function ConvertArrayToDatatable(ByVal arrList As ArrayList) As DataTable 
    Dim dt As New DataTable 
    Try 
     If arrList.Count > 0 Then 
      Dim arrype As Type = arrList(0).GetType() 
      dt = New DataTable(arrype.Name) 

      For Each propInfo As PropertyInfo In arrype.GetProperties() 
       dt.Columns.Add(New DataColumn(propInfo.Name)) 
      Next 

      For Each obj As Object In arrList 
       Dim dr As DataRow = dt.NewRow() 

       For Each dc As DataColumn In dt.Columns 
        dr(dc.ColumnName) = obj.GetType().GetProperty(dc.ColumnName).GetValue(obj, Nothing) 
       Next 

       dt.Rows.Add(dr) 
      Next 
     End If 

     Return dt 
    Catch ex As Exception 
     Return dt 
    End Try 

End Function 
0

도움이되기를 바랍니다 "비 기술적 인 이유로 LINQ를 사용할 수 없습니다"

을 나는 가정 당신이 당신의 세를 유지하기 원하기 때문에 SQL로 LINQ를 사용하지 않으 -tiered 아키텍처. 그러나 LINQ to Objects를 사용할 수 있다는 사실을 알지 못할 수도 있습니다.

중간 계층 방법 인 List Tier2.SomeMethod()가 있다고 가정합니다. 해당 메서드의 반환 값을 GridView 데이터 소스로 할당 한 다음 GridView 컨트롤에서 SomeObject 메서드/속성을 지정할 수 있습니다. gvSomeGridView.DatasSource = Tier2.SomeMethod(); gvSomeGridView.DataBind();

그런 다음 GridView 콜백의 DataItem에서 SomeObject를 검색 할 수 있습니다.

HTH.

관련 문제