2011-05-03 46 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與綁定的問題

現在是什麼問題:我只是得到一行,但有許多重複的列標題(使用正確的綁定),但你已經明白了,我不希望它們在eachother旁邊,而是在eachother下。例如:

不喜歡這個

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

header1 | header2 
string1 | string2 
string1 | string2 

任何人都知道我該怎麼解決這個問題?

+0

是否在edit.SelQuestion.Variations''變異變種甚至編譯?我認爲'var'是C#中的保留字?即使它是「合法的」,我也不會使用它,因爲它很混亂,我會將它改名爲「變體」。 – corlettk 2011-05-03 07:50:13

+1

是的,它編譯...但確定,我會改變它 – Stef 2011-05-03 07:53:04

回答

0

您必須先添加所有列,然後在添加數據時選擇它們。

你在做什麼是添加一個綁定與一個新的列。

編輯:

時,我必須手動添加行我最常做的是:

1.-添加的DataColumn到DataTable,並ColumnStyle到DataGrid就像:

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的ColumnStyles和DataTable的列:

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.-分配列的寬度在DataGrid的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問題參數 – Stef 2011-05-03 08:03:26

+0

使用DataTable作爲DataGrid.DataSource,你可以做(​​(DataTable)dataGrid.DataSource).NewRow(),它給您可以直接添加到DataSource中的新DataRow,這就是您必須執行的操作。 – Amedio 2011-05-03 08:11:26

+0

以及我如何實現這個?所以首先我做我的專欄?那我該怎麼做? – Stef 2011-05-03 08:18:14

0

您正在爲每一行添加一個列定義... WTF?

這是關於How to Bind a DataGrid to a Collection的體面教程。

乾杯。基思。


編輯:

嘗試

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

來定義你的網格列...看到:First method

然後(作爲一個單獨的步驟)通過重複填充DataGrid通過變化...或更好還是閱讀該文章鏈接abo ve,並將網格綁定到集合。無需混淆 - 定義列,並循環遍歷每一行...網格可以自動完成所有操作。

+0

但在這裏我有問題,我不能設置我的ItemsSource,因爲我需要每個變化的列表questionparameters ...所以當我設置我的itemssource SelQuestion 。變化,我無法達到我的財產:變異的問題參數。還是有辦法? – Stef 2011-05-03 07:59:09