Что я пытаюсь сделать, так это получить данные из базы данных. Столбцы всегда будут разными, поэтому их нужно устанавливать динамически. Что я хочу добавить, так это добавить строку между заголовком и первой строкой другую строку, заполненную Comboboxes
Примерно так:
То, что я пробовал
public string Text { get; set; }
public bool Type { get; set; }
public List<string> ComboItems { get; set; }
public string SelectedItem { get; set; }
В зависимости от типа, если true
или false
я изменил CellTemplate
с DataTrigger
<DataTemplate x:Key="Template">
<ContentControl Content="{Binding Path=.}">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding Path = Type}" Value="true">
<Setter Property="ContentTemplate" >
<Setter.Value>
<DataTemplate>
<telerik:RadComboBox ItemsSource="{Binding Path= ComboItems}" SelectedItem="{Binding Path= SelectedItem}"></telerik:RadComboBox>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path = Type}" Value="false">
<Setter Property="ContentTemplate" >
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding Path = Text}"></TextBlock>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
с автоматическими столбцами на
private void DataTableGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
DataTemplate dt = null;
dt = (DataTemplate)Resources["Template"];
DataGridTemplateColumn c = new DataGridTemplateColumn()
{
CellTemplate = dt,
Header = e.Column.Header,
HeaderTemplate = e.Column.HeaderTemplate,
HeaderStringFormat = e.Column.HeaderStringFormat,
SortMemberPath = e.PropertyName ,
};
e.Column = c;
}
This что-то работает, но моя проблема в том, как мне создать ItemSource
. Он не работает с DataTable
, потому что мне не удалось связать объект с DataCell
. В целях тестирования я попробовал что-то вроде
List<Value> valuelist = new List<Value>();
List<Value> valuelist1 = new List<Value>();
List<List<Value>> values = new List<List<Value>>();
Value value = new Value();
value.Type = true;
value.ComboItems= CFGObjects;
value.SelectedItem = "CFG01";
value.Text = "Sample";
Value value1 = new Value();
value1.Type = false;
value1.ComboItems = CFGObjects;
value1.SelectedItem = "CFG02";
value1.Text = "Sample1";
Value value2 = new Value();
value2.Type = false;
value2.ComboItems = CFGObjects;
value2.SelectedItem = "CFG02";
value2.Text = "Sample2";
valuelist.Add(value);
valuelist.Add(value1);
valuelist.Add(value2);
valuelist1.Add(value1);
valuelist1.Add(value1);
valuelist1.Add(value1);
values.Add(valuelist);
values.Add(valuelist1);
DataTableGrid.ItemsSource= values;
, но DataContext для каждого Ячейка такая же, поскольку DataContext исходит из строки, и я не знаю, как ее изменить.
Еще одна вещь, которую я пытался создать конвертер. Я вижу DataContext с 3 списками, но я не знал, как назначить список определенной ячейке c.
Может кто-нибудь помочь мне с этим?