Farpoint Spread의 Virtual Mode
본래 VB6에서 VirtualMode라는 걸 지원했는데
실제 SQL 결과값 시간은 얼마 걸리지 않음에도 이를 Spread에 출력하는데
오랜 시간이 걸려버리는 단점을 커버하기 위한 기능이었다
데브피아에서 어떤 분이 올려놓았던 소스가 있으니 VB6에서 사용하실 분은
그쪽을 참조하시면 되고
.NET에서도 속도가 느리길래 똑같은 방법이 없나 뒤져보다 다음과 같은 답변은 발견
http://our.doctohelp.com/groups/topic/virtual-mode/
답변일자 보자... 2004년이다 별로 신빙성은 가지 않는다
Form_load로 되어있는걸 버튼으로 빼낸거 말고는 다 동일한 소스
결국 VirtualMode라는게 Row , Col 수를 미리 받아 Spread 틀만 만들어둔 다음
내용만 채워넣는 식 다른 이벤트들도 있는데... 이건 무슨 상관이려나...
라이브러리는 가지고 있는 파일을 넣었기에 실행시킬 땐 다른 라이브러리를 가져와서 참조하셔야 할듯
FarPoint 라이브러리만 가져오면 됩니다
string[, ] a = new string[100000, 20];
FarPoint.Win.Spread.Model.CellRange virtualport;
private void button1_Click(object sender, EventArgs e)
{
int i,j;
string s;
fpSpread1.Sheets[0].RowCount = 100000;
fpSpread1.Sheets[0].ColumnCount = 20;
for (i=0;i<100000;i++)
{
for (j=0;j<20;j++)
{
s = "Row:" + i.ToString() + ", Col:" + j.ToString();
}
}
virtualport = new FarPoint.Win.Spread.Model.CellRange(0,0,1000,10);
FarPoint.Win.Spread.Model.CellRange cr = virtualport;
FillSpread(cr);
}
private void button2_Click(object sender, EventArgs e)
{
fpSpread1.Sheets[0].SetArray(0,0,a);
}
private void FillSpread(FarPoint.Win.Spread.Model.CellRange cr)
{
int i,j;
for(i=cr.Row;i<cr.Row+cr.RowCount;i++)
for(j=cr.Column;j<cr.Column+cr.ColumnCount;j++)
fpSpread1.Sheets[0].SetValue(i,j,a);
}
private void fpSpread1_TopChange(object sender, FarPoint.Win.Spread.TopChangeEventArgs e)
{
if (!((virtualport.Contains(fpSpread1.GetViewportBottomRow(0), fpSpread1.GetViewportRightColumn(0), 1, 1))))
{
virtualport = new FarPoint.Win.Spread.Model.CellRange(fpSpread1.GetViewportTopRow(0), fpSpread1.GetViewportLeftColumn(0), 1000, 10);
if (virtualport.IntersectRow(fpSpread1.Sheets[0].RowCount))
virtualport = new FarPoint.Win.Spread.Model.CellRange(fpSpread1.Sheets[0].RowCount - 1000, virtualport.Column, 1000, 10);
FillSpread(virtualport);
}
}
private void fpSpread1_LeftChange(object sender, FarPoint.Win.Spread.LeftChangeEventArgs e)
{
if (!((virtualport.Contains(fpSpread1.GetViewportBottomRow(0), fpSpread1.GetViewportRightColumn(0), 1, 1))))
{
virtualport = new FarPoint.Win.Spread.Model.CellRange(fpSpread1.GetViewportTopRow(0), fpSpread1.GetViewportLeftColumn(0), 1000, 10);
if (virtualport.IntersectColumn(fpSpread1.Sheets[0].ColumnCount))
virtualport = new FarPoint.Win.Spread.Model.CellRange(virtualport.Row, fpSpread1.Sheets[0].ColumnCount - 10, 1000, 10);
FillSpread(virtualport);
}
}
'개발 > C#' 카테고리의 다른 글
C# Excel 설치 없이 xls 파일 제어 (2) | 2019.02.13 |
---|---|
ListView 깜빡임 현상 제거 (0) | 2018.09.19 |
단축키 구현 (0) | 2018.09.11 |
ActiveForm 활용 (0) | 2018.09.11 |
System.Globalization 관련 DateTimePicker (0) | 2018.09.11 |