2012-12-05 3 views
1

나는 txtTranNo, txtCustCode, dtbDate, txtRemarks, txtTotalAmount를 가지며 dtgDetail이라는 이름의 datagridview를 가진 frmTransaction이라는 폼을 가지고있다.datagridview 콤보 상자 열이 데이터베이스에 커밋 할 때 속도에 영향을 줍니까?

dtgDetail에는 cTranNo, nLineID, cProductID, nQty, nPrice 및 nAmount 열이 있습니다.

cProductID는 datamember cProduct 및 displaymember cDescription이있는 콤보 상자 열로, 실행 중에는 제품 코드 대신 제품 이름이 표시됩니다.

하지만 내 제품에는 2000 개의 레코드가 있으며 양식을로드 할 때 속도가 매우 느립니다. 내 데이터베이스에 저장/커밋 할 때도 느립니다.

cProduct 열은 내 양식의 속도와 관련이 있다고 생각합니다. 사실입니까? 어떻게 속도를 높일 수 있습니까?

편집

내가 코드를 표시 할 수 있습니다,하지만 덜 혼란 난 그냥 내 코드가 작동하는 방법에 대해 설명한다면. 내 디자인 타임에, 내 datagridview 빈 열이 있습니다. datagridview의 이름은 바인딩 될 테이블의 이름이기도하며, 실행할 때 테이블의 스키마를 기반으로 자동 바인딩되는 열을 생성합니다. 필드에 콤보 박스 열 또는 일반 텍스트 상자가 있는지 여부를 알려주는 플래그도 있습니다. 콤보 상자 열인 경우 SQL 스크립트를 생성하고 결과를 실행하여 콤보 상자의 데이터 소스가 될 데이터 테이블에 저장합니다. 콤보 박스 열의 datamember 및 displaymember도 플래그에 의해 결정됩니다.

내 콤보 상자 열의 데이터 소스에 내 스크립트에 조건을 넣으면 안됩니다.

편집 - 12-05-12 나는 DataGridView를 콤보 상자의 컬럼에 바인딩에 내 SQL 데이터 소스를 필터링하려고 ... 그리고 나는 내 양식을 단축하는 데 도움이 말할 것입니다. 내 문제는 지금은 콤보 상자에 포함되지 않습니다 내 datagridview 새 레코드를 추가 할 때입니다. 예를 들어,이 스크립트를 내 DataGridview에 바인딩 할 것입니다. "제품에서 ID를 선택하십시오. 여기서 ID는 (1,2,3,4,5)입니다." IData = 6 인 DataGridview에 새 레코드/항목/제품을 삽입하면 설명이 표시되지 않습니다. datagridview ...

+0

도움말 : '( – illumi

+0

데이터를 바인딩하는 방법을 보여주는 코드를 제공해야합니다. DataGridView를 너무 자주 바인딩하는 호출을하고있을 가능성이 있습니다. – Origin

+0

datagridview를 사용하여 SQL 테이블을 최적화하는 것이 도움이 될 수 있음을 발견했습니다. – redhotspike

답변

1

문제를 해결하려면 List<T> Class을 사용해야합니다. 그것의 다만 나의 제안 :)

1

당신은 당신의 모양의 속도를 ... 당신이 UI 스레드에이 일 전부를하고 있다는 것을 믿기 위하여 저를지도. 업데이트를 위해 별도의 스레드를 만들어 양식이 응답 할 수 있도록 양식이 업데이트가 완료 될 때까지 비활성화하십시오.

2

"매우 느림"속도는 어느 정도입니다. 우리는 몇 초 또는 몇 분을 이야기하고 있습니까?

아직 AutoSizeColumnsMode 속성을 None으로 설정해보십시오. 내가 datagridview를 망친 이후로 오랜 시간이 지났지 만 그 속성은 과거에 나에게 성능 악몽을 불러 일으켰다.

그게 문제가 아니라면 그리드가로드되고 저장/커밋 할 때 실행되는 코드를 통해 흩어져있는 타이밍 명령문을 추가하기 시작할 것입니다. 이것은 느린 원인을 찾아내는 데 도움이됩니다. 거의 결코 당신이 기대하는 것이 아닙니다. 다음과 같이 간단한 것 :

var start = DateTime.Now; 
//do work 
var end = DateTime.Now; 

Console.WriteLine("Timer spot 1: " + end.Subtract(start)); 

크게 크게 시작하십시오.전체 메서드 주위에 타이머를 래핑하십시오. 코드를 이리저리 움직여서 (잘하면) 그 속도가 느려지는 지점을 찾으십시오. 그런 다음 정확한 줄을 좁히고 시도하십시오. 느린 발사 상황을 확인하는 것을 잊지 마십시오.

희망 하시겠습니까?

관련 문제