0
DataGridView를 사용하여 DataGridViewComboBoxColumn을 추가하고, 값을 추가하고, 그리드 행을 반복하여 값을 설정합니다. 선택한 값은 다른 행 셀의 값입니다. 이것은 매우 느리며 모범 사례를 사용하고 있는지 확실하지 않습니다. 3000 행의 그리드의 경우 완료하는 데 2 분 이상 걸립니다. 행 수를 반복하고 같은 결과를 가진 foreach 루프 (주석이 달린 코드에서)를 사용해 보았습니다. 이 작업을 수행하는 더 빠른 방법이 있습니까? 여기 내 코드는 다음과 같습니다.DataGridViewComboBox 열의 값을 매우 느리게 설정합니다.
DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
cmb.HeaderText = "New Class";
cmb.Name = "cmb";
foreach (DataGridViewRow row in dgClasses.Rows)
{
if (row.Cells[0].Value != null)
{
cmb.Items.Add(row.Cells[0].Value);
}
}
dgProducts.Columns.Add(cmb);
for (int i = 0; i < dgProducts.Rows.Count; i++)
{
dgProducts.Rows[i].Cells["cmb"].Value = dgProducts.Rows[i].Cells["Class"].Value;
}
//foreach (DataGridViewRow row in dgProducts.Rows)
//{
// row.Cells["cmb"].Value = row.Cells["Class"].Value;
//}
더 느린 이유에 대해 자세히 알고 있습니까? 두 개의 DGViews에 대한 데이터 소스에 대한 간단한 클래스를 사용하여 문제를 복제 할 수 없었습니다. 심지어 dgClass를 0 열의 3000 고유 문자열 값으로 채우고 dgProducts를 고유 클래스 중 하나를 참조하는 3000 개의 객체로 채 웁니다. 스톱워치를 넣은 후 게시 된 코드에 대해 단일 스레드 및 백그라운드 작업자를 테스트했으며 각각 0.4 ~ 0.5 초마다 작업을 마쳤습니다. – OhBeWise
위 코드는 내 방법으로 dgProducts 격자에 콤보 상자 열을 추가하는 것입니다. dgProducts.Columns.Add (cmb) 뒤에 코드에 주석을 달면; 프로그램은 예상대로 매우 빠릅니다. 확실히 느린 가치의 설정입니다. dgClasses 그리드는 소수의 행을 가지므로 각 콤보 박스에는 많은 값이 없습니다. 20 명 이하. 이전 방법에서는 ReadXml을 통해 dgProducts 그리드를로드 한 다음 DataView에로드하여 행을 필터링합니다. 나중에 그리드 반복에 영향을 미칠 것이라고 생각하지 않습니까? – Blaze
그렇게 생각하지는 않지만 코드와 구현 사이의 유일한 차이점입니다. 예 : dgClasses의 DataSource는'{ "Class1", "Class2", ..., "Class20"}''dgProducts 'DataSource가'List '인 문자열을 포함하는 속성이 하나만있는'List ' 동일한 속성과 두 번째 문자열 유형'{ "Foo1", ..., "Foo3000"}'. dgClasses를 20 개 항목으로 이동하면 단일 스레드 및 백그라운드 스레드가 평균 0.02 ~ 0.04 초로 실행됩니다. 데이터 소스와 속성의 수와 관련이 있을지도 모릅니다. 당혹 스럽네. –
OhBeWise