2015-01-26 5 views
1

데이터베이스의 데이터로 채워지는 datagridview가 있으며 마지막 두 열은 콤보 상자와 버튼입니다. addrange를 사용하여 혼합 된 열 유형으로 datagridviewrow 추가

내가 한 번에 모든 행을 추가 Rows.AddRange를 사용 깜박임을 방지하기 위해

내 질문에 내가 dropdownbox에 값을 추가하려면 어떻게 (전체 절차는 BackgroundWorker에에). 항목은 훔쳐보기 목록 일 뿐이므로 데이터 소스를 지정할 필요가 없습니다.

DataTable dt = db.fill(query, dbpars); 
DataGridViewComboBoxCell cbox = new DataGridViewComboBoxCell(); 
cbox.Items.Add("--Please Select--"); 
cbox.Items.Add("Generate"); 
cbox.Items.Add("Ignore"); 

List<DataGridViewRow> rowList = new List<DataGridViewRow>(); 

foreach (DataRow row in dt.Rows) 
{ 
    DataGridViewRow drow = new DataGridViewRow(); 
    drow.CreateCells(dgvClientWork); 

    drow.Cells[0].Value = row[0]; 
    drow.Cells[1].Value = row[1]; 
    drow.Cells[2].Value = row[2]; 
    drow.Cells[3].Value = row[3]; 
    drow.Cells[4].Value = row[4]; 
    drow.Cells[5].Value = row[5]; 

    //((DataGridViewComboBoxColumn)dgvClientWork.Columns[6]).Items.Add("2"); 
    //var td = new DataGridViewComboBoxCell(); 
    //drow.Cells[6] = td; 
    //((DataGridViewComboBoxCell) drow.Cells[6]).Items.Add("WFT"); 

    DataGridViewComboBoxCell td = (DataGridViewComboBoxCell)dgvClientWork.Rows[0].Cells[6]; 

    td.Items.Add("--Please Select--"); 
    td.Items.Add("Generate"); 
    td.Items.Add("Ignore"); 

    //td.Items.AddRange(new object[]{"--Please Select--", "Generate", "Ignore"}); 

    //var t = (DataGridViewComboBoxCell)cbox.Clone(); 
    //drow.Cells.Add(t); 
    //drow.Cells[6] = t; 
    //drow.Cells[6].Value = "--Please Select--"; 
    /*drow.Cells[7].Value = btn;*/ 

    rowList.Add(drow); 
} 

Action action =() => dgvClientWork.Rows.AddRange(rowList.ToArray()); 
dgvClientWork.Invoke(action); 

나는 여러 가지 시도를했지만 콤보 박스는 항상 비어 있습니다.

+0

* 깜박임을 방지하기 위해'Rows.AddRange' *를 사용합니다. ['BeginUpdate'] (http://stackoverflow.com/q/5817632/1997232)도 사용할 수 있습니다. – Sinatr

+0

@Sinatr 그 덕분에, 슬프게도 내가 얻는 문제를 해결하지 못할 것이다 : ( – Neo

+0

그 이유는 내가 당신을 위해 답변을 게시하지 않습니다;) 아마 당신은 행을 추가하지 않습니다 (올바르게 : http : // stackoverflow. co.kr/q/10063770/1997232)? – Sinatr

답변

0

문제가 올바르게 복제 된 경우 dgv의 마지막 행을 확인하면 해당 드롭 다운에 추가 된 항목의 배수가 표시됩니다. 이에

DataGridViewComboBoxCell td = (DataGridViewComboBoxCell)dgvClientWork.Rows[0].Cells[6]; 

:

DataGridViewComboBoxCell td = (DataGridViewComboBoxCell)drow.Cells[6]; 

편집 : 해결하기 위해

는,이 코드 줄을 변경하면 세포가 그럼 그냥

td.Value = "--Please Select--"; 

를 추가, 기본값 일하려면 나를 위해.

편집 : DGV를 만들고 열을 추가 할 때 방금 ComboBoxColumn을 만들고 DataSource를 코드에서 설정 한 것과 같은 문자열 목록으로 설정했을 것입니다. 이렇게하면 사용자가 새로 추가 한 행에 동일한 콤보 상자 소스가 생깁니다. 현재 새 행에는 빈 콤보 상자가 있습니다.