首页 > 解决方案 > 将带有 ComboBox 的行添加到 DataGrid

问题描述

我想做的是,我从数据库中获取数据。列将始终不同,因此必须动态设置。我要添加的是在标题和第一行之间添加一行,另一行填充Comboboxes

像这样的东西

我试过的

   public string Text { get; set; }
        public bool Type { get; set; }
        public List<string> ComboItems { get; set;  }

        public string SelectedItem { get; set; }

取决于类型如果truefalse我改变CellTemplateDataTrigger

   <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#wpfdatagrid

解决方案


推荐阅读