2009-07-01 1 views
2

또는이 목적으로 타사 컨트롤이 더 적합합니까?C# Windows 응용 프로그램의 데이터 격자보기에 65,535 개 이상의 열을 추가하는 방법은 무엇입니까?

+13

65,535 열은 사람이 읽을 수 있어야합니다. – annakata

+2

나는 그렇게하는 것이 타당한 이유를 생각하기가 정말 어려웠다. ... – Hemant

+7

나는 그것을 지원하는 데이터 격자보기를 찾는 것보다 응용 프로그램의 디자인을 살펴볼 것이다 ... – fretje

답변

9

이론적으로 DevExpress XtraGrid은 그리드의 Int32.MaxValue 행 또는 열을 지원한다는 것을 알고 있습니다. 이 경우 한계는 그리드가 아닌 시스템 메모리입니다.

하지만 실제로 많은 양의 데이터를 표시해야합니까?

+2

+1 타사 옵션에 대한 질문 및 제기 이유 – curtisk

2

짧은 대답 : 해달라고!

답변 : FillWeight를 10 이하로 변경하십시오 (기본값은 100). 도달 한계는 총 FillWeight가 64K x 100을 초과하여 발생합니다 (누가 한계인지 아는 사람).

+1

기본적으로 FillWeight를 유지하면 ColumnCount x FillWeight <65535이므로 기본 FillWeight를 유지하면 열 제한은 약 655입니다. 따라서 FillWeight를 최소 (1)로 변경하더라도 최대 열 수는 65,535가됩니다. – nullDev

+0

아, 나는 깜빡 한 것 같았다! 감사 – leppie

2

가상 목록을 사용하십시오 (보이는 행만로드). 나는 WinForms ListView가 가상 모드를 가지고 있지만 WPF는 그렇지 못하다.

그래서 WPF 사용자 정의 컨트롤을 만들고 VirtualMode = True로 설정하고 ElementHost 컨테이너로 WinForms 클라이언트에서이 사용자 정의 컨트롤을 호스팅하십시오.

죄송합니다. 더 구체적으로 말할 수는 없지만, 손을 쓸 코드가 없습니다.

라이언

0

WPF에 대한 Xceed의 데이터 그리드는 쉽게 할 모두 열 및 UI 가상화를 사용 할 수 있습니다. 라이브 데모를 확인하십시오. perf를 테스트하는 데 필요한만큼의 열과 행으로 데모를 채울 수 있습니다. http://xceed.com/Grid_WPF_Demo.html

1

FillWeight 변수가 정수가 아닌 부동 소수점 숫자를 사용하므로 0.5f 또는 0.01f가됩니다 (이론적으로 최대 6553500 열 허용). 불행히도, 창조는 매우 느립니다. (적어도 저에게는 1000 컬럼이 지나면 10,000 컬럼이 약 20 초 걸립니다.) 아마도 다른 사람들이 제안한 VirtualMode는 가치가 있습니다.

빈 셀의 x 크기 표를 만드는 데 사용하는 코드는 다음과 같습니다. 아마도 다른 사람이 속도를 더욱 최적화 할 수 있습니다.

private void createDGVcells(DataGridView dgv, int columns, int rows) { 
    // Optimization: 
    dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; // Massive speed up if high column count 
    dgv.ScrollBars = ScrollBars.None; // Apx. 75% speedup for high row count 
    dgv.AllowUserToAddRows = false; // Further 50% apx speedup when creating rows 
    dgv.ReadOnly = true;   // Small apx. 50ms latency speedup? 

    // First clear any existing cells, should they exist: 
    if (dgv.DataSource != null) dgv.DataSource = null; 
    else { 
     dgv.Rows.Clear(); 
     dgv.Columns.Clear(); 
    } 

    // Create the first row (the columns): 
    DataGridViewColumn[] dgvc = new DataGridViewColumn[columns]; 
    for (int i = 0; i < dgvc.Length; ++i) { 
     DataGridViewColumn dg = new DataGridViewTextBoxColumn(); 
     dg.FillWeight = 0.1f; // Allows up to 655350 columns in theory 
     dgvc[i] = dg; 
    } 
    dgv.Columns.AddRange(dgvc); 

    // Add all the rows (very quick) 
    for (int j = 0; j < rows - 1; j++) dgv.Rows.Add(); 

    // Optional to turn these back on 
    dgv.ReadOnly = false; 
    dgv.AllowUserToAddRows = true; 
    dgv.ScrollBars = ScrollBars.Both; 
    dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing; 
} 
관련 문제