WPF:从特定单元格获取列标题

时间:2015-11-16 21:09:40

标签: wpf binding datagrid

我有一个数据网格,我根据几个标准(日期和部门)动态创建列。每列都实际上是一个列表框,其中包含要拖动的项目。

我的问题是每个列表框项源都不同。通过阅读标题我可以看到如何找到源的唯一方法(我想在我的列和单元格中添加某种参数,但我无法找到它。

有没有办法做到这一点?

问候,

2 个答案:

答案 0 :(得分:1)

你可以将你的xaml作为

<Window.Resources>
    <DataTemplate x:Key="Field1CellTemplate" >
    </DataTemplate>
    <DataTemplate x:Key="DeptCellTemplate" >
    </DataTemplate>
</Window.Resources>
<Grid>
    <DataGrid Name="grid" AutoGenerateColumns="false">
         <DataGrid.Columns>
            <DataGridTemplateColumn  Header="Field1" CellEditingTemplate="{StaticResource Field1CellTemplate}" Width="100">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Field1}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn >
            <DataGridTemplateColumn  Header="Dept" CellEditingTemplate="{StaticResource DeptCellTemplate}" Width="100">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Dept}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn >

        </DataGrid.Columns>

    </DataGrid>
</Grid>

您已将每列数据的itemssource动态设置为

DataTemplate Field1CellTemplate = this.TryFindResource("Field1CellTemplate") as DataTemplate;
        if (Field1CellTemplate != null)
        {
            var frameworkElementFactory = new FrameworkElementFactory(typeof(ComboBox));
            frameworkElementFactory.SetValue(ComboBox.ItemsSourceProperty, new object[] { "option1", "option2", "option3" });
            Field1CellTemplate.VisualTree = frameworkElementFactory;
        }

        DataTemplate DeptCellTemplate = this.TryFindResource("DeptCellTemplate") as DataTemplate;
        if (Field1CellTemplate != null)
        {
            var frameworkElementFactory = new FrameworkElementFactory(typeof(ComboBox));
            frameworkElementFactory.SetValue(ComboBox.ItemsSourceProperty, new object[] { "CS", "ETC", "IT" });
            DeptCellTemplate.VisualTree = frameworkElementFactory;
        }

        DataTable dt = new DataTable();
        dt.Columns.Add("Field1");
        dt.Columns.Add("Dept");
        dt.Rows.Add(new object[] { "option1", "CS"});
        dt.Rows.Add(new object[] { "option3", "IT" });
        dt.Rows.Add(new object[] { "option2", "ETC" });

        grid.ItemsSource = dt.DefaultView;

希望这有帮助!

答案 1 :(得分:0)

原来这很简单

 Dim oLstBox As ListBox = e.Source
 Dim poste As T_Ref_Poste = oLstBox.DataContext
 Dim row = dgHoraire.ItemContainerGenerator.ContainerFromItem(poste)