2011-05-03 9 views
1
EditVariationWindowModel edit = (EditVariationWindowModel)this.DataContext; 

     var datagrid = dataGrid3; 



     foreach (Variation variation in edit.SelQuestion.Variations) 
     { 
      foreach (var parameter in variation.QuestionParameters) 
      { 
       var binding = new Binding(parameter.Value); 
       var column = new DataGridTextColumn(); 
       column.Header = parameter.Key.Name; 
       column.Binding = binding; 
       datagrid.Columns.Add(column); 

      } 
     } 

이 코드는 내 DataGrid의 코드입니다. 나는 wpf에서 일한다.C# datagrid 바인딩 문제

이제는 문제가 있습니다. 하나의 행을 가져 오지만 (오른쪽 바인딩이있는) 여러 개의 열 머리글이 중복되지만, 이미 이해할 수있는 것처럼 나는 서로 옆에 있지만 서로가 있기를 원하지 않습니다. 예를 들면 :

header1 | header2 | header1 | header2| 
string1 | string2 | string 1| string2| 

하지만

header1 | header2 
string1 | string2 
string1 | string2 

누구든지 내가이 문제를 해결하는 방법을 알고 싫어?

+0

는 edit.SelQuestion.Variations'에서'변화의 VAR도 컴파일 하는가 ? 나는'var'이 C#의 예약어라고 생각 했습니까? 그리고 그것이 "합법적"이라 할지라도 나는 그것을 사용하지 않을 것입니다, 왜냐하면 그것은 혼란 스럽기 때문에, 나는 그것을 '변형'이라고 이름을 바꿉니다. – corlettk

+1

그래, 컴파일 된 ... 그래,하지만 괜찮아, 내가 바꿀거야 – Stef

답변

0

먼저 모든 열을 추가 한 다음 데이터를 추가 할 때 선택해야합니다.

새 열에 바인딩을 추가하는 것입니다.

편집 : 수동으로 행을 추가해야 할 때

나는 보통 무엇을 할입니다

1 .- DataGrid에에 DataTable을하고 ColumnStyle에 DataColumn에 추가처럼 :

DataColumn fNameColumn8 = new DataColumn(); 
fNameColumn8.DataType = System.Type.GetType("System.String"); 
m_dataTable.Columns.Add(fNameColumn8); 

ColumnStyle myStyleColumn8 = new ColumnStyle(7); 
myStyleColumn8.TextAlign = ContentAlignment.TopRight; 

DataGridTableStyle dataGridTableStyle = new DataGridTableStyle(); 
dataGridTableStyle.MappingName = MAPPINGNAME; 
dataGridTableStyle.GridColumnStyles.Add(myStyleColumn8); 

this.dataGrid.TableStyles.Add(dataGridTableStyle); 

2 .- 표시 할 매핑 이름과 이름을 DataGrid 및 DataTable의 ColumnStyles에 할당하십시오.

m_dataTable.Columns[8].ColumnName = this.m_strHeader; 

((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).MappingName = this.m_strHeader; 

((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).HeaderText = this.m_strHeader; 

3 .- 데이터 격자의 ColumnStyles를에 열의 폭을 할당합니다

((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).Width = 20; 

4 .- 행 채우

DataRow dataRow = this.m_dataTable.NewRow(); 

dataRow[this.m_strHeader] = "DATA"; 

this.m_dataTable.Rows.Add(dataRow); 
+0

하지만 어떻게 할 수 있습니까? 내 열을 만드는 방법을 안다.하지만 새로운 행을 추가하는 법을 모르겠다. foreach questionparameter – Stef

+0

DataGrid.DataSource로 DataTable을 사용하면 (DataTable) dataGrid.DataSource) .NewRow()는 새로운 DataRow를 DataSourceDirectly에 추가 할 수 있습니다. – Amedio

+0

및 이것을 어떻게 구현합니까? 그래서 먼저 나는 기둥을 만든다. 그러면 내가 뭘해야합니까? – Stef

0

각 행에 대해 열 정의를 추가하고 있습니까? WTF?

다음은 How to Bind a DataGrid to a Collection에 관한 내용입니다.

건배. 키이스.


편집 : 다음 First method

을 (별도의 단계로) 반복하여 데이터 그리드를 채울 :

은 볼 ...

foreach (var parameter in edit.SelQuestion.Variations.First().QuestionParameters) 

는 그리드 열을 정의하는 것을 시도하십시오 유사 콘텐츠를 통해 ... 또는 더 나은 여전히 ​​읽기 기사 링크 된 abo 그리고 그리드를 컬렉션에 바인딩하면됩니다. 혼란 스러울 필요가 없습니다 - 열 정의 및 각 행 반복 ... 그리드는 자동으로 모든 작업을 수행 할 수 있습니다.

+0

하지만 각 문제의 목록 questionparameters가 필요하기 때문에 내가 ItemsSource를 설정할 수 없다는 문제가있다 ... 그래서 내가 itemsSource를 SelQuestion으로 설정할 때 변종, 나는 내 재산에 갈 수 없다 : 변이의 질문 매개 변수. 아니면 방법이 있습니까? – Stef