Quantcast
Channel: Extended WPF Toolkit™ Community Edition
Viewing all articles
Browse latest Browse all 4964

New Post: Populate ComboBox in WPF DataGrid

$
0
0
Hi,

Maybe something like :
<Window.Resources>
      <xcdg:DataGridCollectionViewSource x:Key="cvsRandomData"
                                         Source="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=local:MainWindow},Path=RandomData}" />

      <xcdg:CellEditor x:Key="comboEditor">
         <xcdg:CellEditor.EditTemplate>
            <DataTemplate>
               <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=local:MainWindow},Path=Ranks}"
                         SelectedValue="{xcdg:CellEditorBinding}">
               </ComboBox>
            </DataTemplate>
         </xcdg:CellEditor.EditTemplate>
      </xcdg:CellEditor>
   </Window.Resources>
    <Grid>
      <xcdg:DataGridControl x:Name="_dataGrid"
                            ItemsSource="{Binding Source={StaticResource cvsRandomData}}"
                            SelectedItem="{Binding  RelativeSource={RelativeSource FindAncestor,AncestorType=local:MainWindow},Path=SelectedItem}">
         <xcdg:DataGridControl.Columns>
            <xcdg:Column FieldName="Name"
                         Width="100" />
            <xcdg:Column FieldName="Rank"
                         Width="150"
                         CellEditor="{StaticResource comboEditor}"/>
            <xcdg:Column FieldName="Value"
                         Width="75" />
         </xcdg:DataGridControl.Columns>
      </xcdg:DataGridControl>
   </Grid>
</Window>

namespace WpfApplication70
{
  public partial class MainWindow : Window
  {
    private Random randomizer = new Random();
    private List<string> ranksList = new List<string>() { "First", "Second", "Third" };

    public MainWindow()
    {
      InitializeComponent();
      
      dataTable.Columns.Add( new DataColumn( "Name", typeof( string ) ) );
      dataTable.Columns.Add( new DataColumn( "Rank", typeof( string ) ) );
      dataTable.Columns.Add( new DataColumn( "Value", typeof( int ) ) );

      for( int i = 0 ; i < 30 ; i++ )
      {
        object[] values = new object[]  {  "Name" + i + 1, this.GetRandomDataEnum(), i * 6 };
        dataTable.Rows.Add( values );
      }
    }

    public DataTable RandomData
    {
      get
      {
        return dataTable;
      }
    }
    DataTable dataTable = new DataTable();

    public List<String> Ranks
    {
      get
      {
        return ranksList;
      }
    }

    public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register( "SelectedItem", typeof( object ), typeof( MainWindow ), new UIPropertyMetadata( null, OnSelectedItemChanged ) );
    public MyItems SelectedItem
    {
      get
      {
        return ( MyItems )GetValue( SelectedItemProperty );
      }
      set
      {
        SetValue( SelectedItemProperty, value );
      }
    }

    private static void OnSelectedItemChanged( DependencyObject o, DependencyPropertyChangedEventArgs e )
    {
      MainWindow window = o as MainWindow;
      if( window != null )
      {
      }
    }

    private string GetRandomDataEnum()
    {
      int value = randomizer.Next( 0, 3 );
      return ranksList[ value ];
    }
  }

  public class MyItems
  {
    public string Name { get; set; }
    public string Rank { get; set; }
    public int Value { get; set; }
  }
}

Viewing all articles
Browse latest Browse all 4964

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>