c# - 将带有 ComboBox 的行添加到 DataGrid
问题描述
我想做的是,我从数据库中获取数据。列将始终不同,因此必须动态设置。我要添加的是在标题和第一行之间添加一行,另一行填充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;
}
这有点工作,但我的问题是如何创建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;
但是每个 Cell 的 DataContext 都是相同的,因为 DataContext 来自 Row 并且我不知道如何更改它。
我尝试的另一件事是创建一个转换器。我看到带有 3 个列表的 DataContext,但我不知道如何将列表分配给特定的单元格。
有人可以帮我弄这个吗?
解决方案
推荐阅读
- c++ - strcpy(s+i, s+i+1) 是什么意思?
- java - 如何通过 Mongock 向集合中的所有文档添加新字段?
- swift - 如何从 AES.GCM.Nonce 获取数据 obj - swift
- ios - NSArray 结构数组中的重复数组(Swift)
- python - pytest:是否可以从代码中启用标记?
- vue.js - Nuxt.JS 创建自定义 UI 材质组件
- android - 如何更改 PagingSource 或 RemoteMediator 中的 Paging3 问题
- c++ - VS Code:在 browse.path 中找不到包含文件,但 IDE 在我键入时识别出该名称
- c# - 是否可以在 Web App Bot 中翻译自适应卡片?
- python - 检测在一段时间内按下的键 Python