2012-12-04 4 views
0

XML 파일의 필드를 사전으로 읽는 프로그램이 있습니다. 사전의 값에서 dataGridView의 열 이름을 지정하고 만들고 싶습니다. 문제는 사전에있는 값이 어떤 순서로 될 것인지를 런타임까지 알 수 없다는 것입니다. 프로그래밍 방식으로이 작업을 수행하고 콤보 상자, 텍스트 상자 등의 열 유형을 지정하는 방법이 있습니까?사전의 값에서 dataGridView의 새 열 만들기

여기서 custXML은 import_seq를 키로하고 display_name을 값으로 사용하는 사전입니다. 여기에 내가있는 DataGridView에 추가하는 시도 (64 열, 비어있을 수도 일부가 수정 된) 내용은 다음과 같습니다 그러나

DataGridViewColumn[] foo = new DataGridViewColumn[64]; 
for (int i = 0; i < 63; i++) 
    foo[i] = new DataGridViewColumn(); 

foreach (KeyValuePair<int, string> item in custXML) 
{ 
    for (int i = 0; i < 63; i++) 
    foo[i].HeaderText = item.Value.ToString(); 
} 

for (int i = 0; i < 63; i++) 
    dataGridView1.Columns.Add(foo[i]); 

을, 나는 컬럼의 이름은 모두 "소스 코드"

말 것을 실행할 때 코드

foreach (KeyValuePair<int, string> item in custXML) 
     { 
      for (int i = 0; i < 63; i++) 
       foo[i].HeaderText = item.Value.ToString(); 
     } 

에서

+0

으로 바꿀 수 있습니다. 그러면 XML의 구조를 볼 수 있도록 디자인 타임 코드 샘플을 제공 할 수 있습니까? – MethodMan

답변

0

당신이 반복적으로 동일한 문자열에 열 머리글을 모두 변경합니다. 그래서 그들은 모두 XML에서 마지막 항목의 이름으로 끝납니다. 모든 DataGridViewColumn에 대해 루핑하는 대신 각 새 키 값 쌍에 대해 적절한 DataGridViewColumn의 제목을 설정해야합니다.

내가 코멘트에 대답 : 당신을 위해

편집을 운동으로 구현을 떠날 것이다 :

foreach는 반복 사전을하지만, 내부 루프는 모든 현재 사전 항목을 적용 기둥들. 결국 모든 열은 마지막 사전 항목의 항목 값을 가져옵니다. 당신이하려고하는 것을 이해한다면 내부 루프를

if (item.Key >= 0 && item.Key <= 63) 
    foo[item.Key].HeaderText = item.Value.ToString(); 
+0

잘 모르겠다. item.Value.ToString()이 사전을 반복하여 마지막 항목에 걸리지 않았다고 생각했다. 오 잘. –

관련 문제