2012-07-31 50 views
1

我已經搜索了一段時間,並且在這個主題上有很多帖子,但沒有一篇似乎給了我正確的答案。如何將數據表動態綁定到網格並將數據包裝在某些列中

我創建的窗體上DataGrid中簡單地爲:

<StackPanel Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="860"> 
     <DataGrid ScrollViewer.VerticalScrollBarVisibility="Auto" 
     ScrollViewer.HorizontalScrollBarVisibility="Auto" 
     HorizontalAlignment="Stretch" 
     VerticalAlignment="Top" 
     Name="DGI" 
     Height="700" 
     ItemsSource="{Binding}" 
     Background="LightGray" RowBackground="LightYellow" AlternatingRowBackground="LightBlue"> 
     </DataGrid> 
</StackPanel> 

現在,我在我的代碼綁定數據如下:

private void btnUpdateGridI_Click(object sender, RoutedEventArgs e) 
    { 
     DGI.DataContext = null; 
     IEnumerable<DataRow> query = 
      from punch in dspl.Tables[0].AsEnumerable() 
      where punch.Field<String>("TOS").Contains(cmbTOSI.SelectedItem.ToString()) && 
       punch.Field<String>("BU").Contains(cmbBUI.SelectedItem.ToString()) && 
       punch.Field<String>("CLOSED").Contains(cmbClosedI.SelectedItem.ToString()) && 
       punch.Field<String>("CAT").Contains(cmbCATI.SelectedItem.ToString()) 
      select punch; 
     try 
     { 
      DataTable boundTable = query.CopyToDataTable<DataRow>(); 
      DGI.DataContext = boundTable; 
      lbltotalitemsI.Content = boundTable.Rows.Count.ToString() + " ITEMS"; 
      DGI.Columns[6].MaxWidth = 350; 
     } 
     catch 
     { 
      MessageBox.Show("No data exists for the current selection."); 
      lbltotalitemsI.Content = "0 ITEMS"; 
      DGI.DataContext = null; 
     } 
    } 

我試圖使文本在第6列包裝。我能夠定義它的最大寬度,但是對於包裝文本,大多數在線源指的是在數據網格中使用TextBlock。

是否有一個簡單的方法來動態地做到這一點?我會想爲多列做這個。

在此先感謝! Wouter

回答

1

嗨不,我們不能直接設置TextWrap,這就是爲什麼提供模板(模板負責外觀而不影響控件行爲)的原因。上述問題的一個簡短示例是

<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="True">//Set your all properties as you want 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="TOS" Binding="{Binding TOS}"></DataGridTextColumn> 
     <DataGridTextColumn Header="BU" Binding="{Binding BU}"></DataGridTextColumn> 
     <DataGridTextColumn Header="CLOSED" Binding="{Binding CLOSED}"></DataGridTextColumn> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <!--This is how we can set Text Wrap--> 
        <TextBox Text="{Binding CAT}" TextWrapping="Wrap"/> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

第4列是TextWrap。我希望這將有所幫助。

+0

嗨,謝謝你的回答,答案與我發現的其他帖子一致。但是,我無法對列進行硬編碼,因爲它們可能會更改。 – 2012-07-31 06:03:40