Размещение нетекстовых колонок на таблицу DataGrid

Пример вставки картинок и комбобоксов в таблицу.
  • добавить на форму элемент DataGrid
  • объявить нетекстовые колонки как <DataGridTemplateColumn>
  • добавить в <DataTemplate> элемент <Image> и указать привязку данных для колонок с изображениями
  • добавить в <DataTemplate> элемент <ComboBox.ItemsSource> и указать привязку данных для колонок с комбобоксами. В ComboBox.ItemsSource можно также указать значения комбобокса по умолчанию

Пример кода на C#:
namespace DocTest
{
        public partial class MainWindow : Window
    {
        public static DataSourceMyClass dataSourceMyClass = new DataSourceMyClass();

        public class DataSourceMyClass
        {
            public List<MyClass> myClasses = new List<MyClass>();
            public List<MyClass> MyClasses
            {
                get { return myClasses; }
            }
            public DataSourceMyClass()
            {
                FillMyClasses();
            }
            
            private void FillMyClasses() //Заполнение списка
            {
                myClasses.Add(new MyClass("Фото", "C:\\1.jpg"));
                myClasses.Add(new MyClass("Картинка", "C:\\2.jpg"));              
            }
            
        }

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = dataSourceMyClass;
           
        }
        public class MyClass
        {
            public MyClass(string typeI, string imagei)
            {
                TypeI = typeI;
                ImageI = imagei;
            }
            public string TypeI { get; set; }
            public string ImageI { get; set; }
        }
    }
}
Пример кода в XAML:
<Window x:Class="DocTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:coll="clr-namespace:System.Collections;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid ItemsSource="{Binding MyClasses}" AutoGenerateColumns="False"  HorizontalAlignment="Left" Margin="12,12,0,0" Name="dataGrid1" VerticalAlignment="Top" Height="299" Width="491">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="Тип" CanUserSort="True" SortMemberPath="TypeI">
                    <DataGridTemplateColumn.CellTemplate >
                        <DataTemplate>
                            <ComboBox Name="Тип" SelectedItem="{Binding Path=TypeI,UpdateSourceTrigger=PropertyChanged}">
                                <ComboBox.ItemsSource>
                                    <coll:ArrayList>
                                        <sys:String>Картинка</sys:String>
                                        <sys:String>Фото</sys:String>
                                    </coll:ArrayList>
                                </ComboBox.ItemsSource>
                            </ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <DataGridTemplateColumn Header="Изображение" Width="100" >
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate />
                    </DataGridTemplateColumn.CellEditingTemplate>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Image Source="{Binding ImageI}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

Пример запущенного приложения:
CustomDataGrid2.jpg
--
автор: Залоило Александр

Last edited Jan 20, 2012 at 3:51 AM by basph, version 9

Comments

No comments yet.