2011-03-10 59 views
0

我正在處理基於返回數據集中的表創建動態數據網格的應用程序。
所有表可能有不同的列,所以我創建基於行計數的動態數據網格並設置AutoGenerateColumns = true;
這裏是我的C#代碼:無法添加包含按鈕的列到動態數據網格

for (int count = 0; count < ds.Tables.Count; count++) 
      { 
       DataGrid dg = new DataGrid(); 
       dg.Name = ds.Tables[count].TableName.ToString(); 
       dg.Margin = new Thickness(5); 
       dg.Width = 800; 
       dg.MaxHeight = 200; 
       dg.AutoGenerateColumns = true; 
       dg.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; 
       dg.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; 
       dg.ItemsSource = ds.Tables[count].DefaultView; 
       stkCollection.Children.Add(dg); 
      } 

我要與具有每行中的按鈕每個動態數據網格添加一個額外的列。

這是我的XAML:

<GroupBox Header="Log Details"> 

    <Border > 
     <Grid Background="{StaticResource NormalBackground}"> 
      <Grid.ColumnDefinitions > 
       <ColumnDefinition Width="150" /> 
       <ColumnDefinition Width="10"/> 
       <ColumnDefinition Width="150"/> 
       <ColumnDefinition Width="10"/> 
       <ColumnDefinition Width="150"/> 
       <ColumnDefinition Width="10"/> 
       <ColumnDefinition Width="150"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="10"/> 
       <RowDefinition Height="60"/> 
       <RowDefinition Height="10"/> 
       <RowDefinition Height="*" MaxHeight="600"/> 
      </Grid.RowDefinitions> 
      <Button Name="btnMessage" Content="Message" Grid.Row="1" Grid.Column="2" Width="120" Height="50" HorizontalAlignment="right" Click="btnMessage_Click"></Button> 
      <Button Name="btnDraw" Content="Draw" Grid.Row="1" Grid.Column="4" Width="120" Height="50" HorizontalAlignment="right" Click="btnDraw_Click"></Button> 
      <StackPanel x:Name="stkCollection" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="8" Orientation="Vertical"/> 


     </Grid> 

    </Border> 

</GroupBox> 

任何一個有任何想法。
我該怎麼做?
在此先感謝

回答

0

您可以定義一個DataGridTemplateColumn像這樣在XAML中的資源:

<Window.Resources> 
    <DataGridTemplateColumn x:Key="DGTemplateColumn"> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <Button Content="Info" Click="DGCell_Button_Click"/> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 
</Window.Resources> 

添加到您的DataGrid代碼:

DataGrid.Columns.Add(FindResource("DGTemplateColumn") as DataGridTemplateColumn); 

和處理的單擊事件該按鈕(在這裏,我使用Buttons的DataContext顯示該職員的姓名,該職位是在該行中顯示的基礎對象):

private void DGCell_Button_Click(object sender, RoutedEventArgs e) 
{ 
    Employee emp = (sender as Button).DataContext as Employee; 
    MessageBox.Show(emp.Name); 
} 
0

感謝快速回復.. 我找到了解決辦法... 這裏是我的代碼...

for (int count = 0; count < ds.Tables.Count; count++) 
      { 
       DataGrid dg = new DataGrid(); 
       dg.Name = ds.Tables[count].TableName.ToString(); 
       dg.Margin = new Thickness(5); 
       dg.Width = 800; 
       dg.MaxHeight = 200; 
       DataGridTemplateColumn dgc = new DataGridTemplateColumn(); 
       DataTemplate dtm = new DataTemplate(); 

       FrameworkElementFactory btnReset = new FrameworkElementFactory(typeof(Button)); 
       btnReset.SetValue(Button.ContentProperty, "Restore"); 
       btnReset.SetValue(Button.ToolTipProperty, "Restore Selected Row"); 
       btnReset.SetValue(Button.DataContextProperty, new Binding("TableName")); 

       btnReset.AddHandler(Button.ClickEvent, new RoutedEventHandler(btn_Click)); 

       //set the visual tree of the data template 
       dtm.VisualTree = btnReset; 
       dgc.CellTemplate = dtm; 
       dg.Columns.Add(dgc); 
       dg.AutoGenerateColumns = true; 
       dg.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; 
       dg.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; 
       dg.ItemsSource = ds.Tables[count].DefaultView; 
       stkCollection.Children.Add(dg); 
      } 

謝謝..

+0

@ user649985:這不是一個答案。您可以通過編輯或自己的問題或其他人的回答評論來更新原始問題。 – 2011-03-10 21:49:30