2013-08-13 10 views
1

개체가있는 Gridview를 채우는 데 대한 게시물이 많이 있지만 작동하지 않습니다.DataGridView에 내 목록이 표시되지 않습니다.

시간, 설명 및 오류와 같은 3 개의 공용 속성이있는 로그가 있습니다. LogList라는 공용 속성이 있으며 LogList 개체 목록을 반환합니다.

그리고 시간, 설명 및 오류라는 3 개의 열이있는 myGV라는 WinForm에 DataGridView가 있습니다. logList가 데이터를 포함하지 않더라도,

myGV.DataSource = Logs.logList.OrderBy(x => x.Time); 

을하지만 내 DataGridView에 아무것도 표시되지 않습니다 :

그래서 노력하고있어.

이 사이트에 대한 귀하의 작업에 감사드립니다.

업데이트 : myGV에서 모든 열을 제거하면 데이터가 표시됩니다. 그렇다면 내 List of Objects의 속성과 정적 열을 어떻게 일치 시키나요? 수동으로 열을 추가 한 후

+0

을 결합하기 위해 더 많은 정보를 위해 Screenshot

을하고있다? –

+0

또한 WinForms 또는 WPF를 사용하고 있습니까? – JFTxJ

+0

열의 '이름'속성이 시간, 설명 및 오류로 설정되었습니다. –

답변

3

그것은 당신이 If I remove all columns from myGV it does display data...을 말했다 이상하다. 귀하의 문제가 재현되어 귀하의 LINQ 쿼리가 실행되지 않습니다. 물론

myGV.DataSource = Logs.logList.OrderBy(x => x.Time).ToList(); 

, 정적 열 DataPropertyName이 데이터 소스의 속성과 일치하지 않는 경우가있을 것입니다 더 많은 열 : 당신은 당신의 DataGridViewDataSource으로 결과를 사용하기 전에 ToList() 또는 이와 유사한 방법을 호출해야 DataGridView에 예상보다 많이 추가되었습니다. 예를 들어, 가정의 모든 Time 당신이 위와 같이 당신의 DataGridViewDataSource을 할당하여 DataGridView 모두 6 열이있을 수 있습니다, 대신 3 경우, DescriptionError는 (기본적으로) 어떤 DataPropertyNameyourDataGridView.AutoGenerateColumns = true를 지정하지 않고 디자인 타임에 추가 .난 그냥 DataGridView을하자, 당신은 (기본적으로) myGV.AutoGenerateColumns = true을 설정하고 모든 추가 열을 제거하는 것이 좋습니다

myGV.Columns["Time"].DataPropertyName = "Time"; 
myGV.Columns["Description"].DataPropertyName = "Description"; 
myGV.Columns["Error"].DataPropertyName = "Error"; 
myGV.DataSource = Logs.logList.OrderBy(x => x.Time).ToList();//This should be called at here after all the DataPropertyNames are initialized. 

: 그래서 당신은, 당신의 DataGridView이 같은를 DataSource을 할당하기 전에 추가 된 열 DataPropertyName을 할당 할 수 있습니다 자동 생성 컬럼.

+0

감사합니다. DataPropertyName을 설정해야했지만 LINQ가 제안대로 실행되지 않는 것이 문제였습니다. ToList()를 추가하는 것이 트릭을 만들었습니다. –

3

, 당신은 당신이 그들의 각 하나의 DataPropertyName를 업데이트 확인해야 : 컨트롤의 작업을 표시하려면 DataGridView에의 상단에있는 작은 화살표에

  • 을 클릭합니다. enter image description here
  • 편집 열을 클릭하십시오.
  • 각 열에 대해 DataPropertyName 속성을 찾고이 열을 Date, ErrorDescription으로 변경하고 열에 사용한 다른 이름으로 변경하십시오. enter image description here

은 로그 클래스의 Properties 당신과 함께 확인이 일치합니다.

enter image description here

+1

완전하고 간결한 대답을 해주셔서 감사합니다. 이것은 문제의 일부 였지만 그 자체로는 작동하지 않았습니다. King Kongs가 답변 한대로 ToList()를 호출해야했습니다. –

0

OrderBy()는 IOrderedEnumerable <> DataGridView에 바인딩 할 수없는 데이터 형식을 반환합니다. 그래서 바인딩 소스에 캐스트해야합니다. 과 같은 ToList() 메서드를 사용하여 "OrderBy(). ToList()"를 사용하여 gridview를 바인딩합니다. dataGridView1.DataSource = studList.OrderBy(a => a.Age).ToList();

이 DataGridView를 방문에게 dataGridView binding 당신의 열이 뭔가 "라고"하는 방법

관련 문제