繁体   English   中英

在C#中的DataGrid中填充一个ComboBox

[英]Populate a ComboBox in a DataGrid in C#

如何在DataGrid myDataGrid的Sections字段下,将ComboboxList<string> Sections的项目显示为Combobox框。

List<string> Sections = new List<string> {"C50", "C40", "C30"};

在此处输入图片说明

目前,我正在使用以下代码填充myDataGrid中的其余字段。

var data = from row in Building.Columns
            select new
            {
                row.Id,
                row.X,
                row.Y,
                row.StartElevation,
                row.EndElevation,
                row.FoundationHeight,
                Sections = ""
            };
myDataGrid.ItemsSource = data;

如果使用AutoGenerateColumns="True" ,则应使用AutoGeneratingColumn事件( msdn )。

XAML:

<DataGrid x:Name="myDataGrid" ItemsSource="{Binding}" 
          AutoGenerateColumns="True"
          AutoGeneratingColumn="myDataGrid_AutoGeneratingColumn"/>

代码隐藏:

private void myDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyName == "Sections")
    {
        var cb = new DataGridComboBoxColumn();
        cb.Header = "Sections";
        cb.ItemsSource = new List<string> { "C50", "C40", "C30" };
        cb.SelectedValueBinding = new Binding("Sections");
        e.Column = cb;
    }        
}

AutoGenerateColumns="False"解决方案:

XAML:

<DataGrid x:Name="myDataGrid" ItemsSource="{Binding}" 
          AutoGenerateColumns="False"
          >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Id" Binding="{Binding Id}" />
        <DataGridTextColumn Header="X" Binding="{Binding X}" />
        <DataGridTextColumn Header="Y" Binding="{Binding Y}" />
        <DataGridTextColumn Header="StartElevation" Binding="{Binding StartElevation}" />
        <DataGridTextColumn Header="EndElevation" Binding="{Binding EndElevation}" />
        <DataGridTextColumn Header="FoundationHeight" Binding="{Binding FoundationHeight}" />
        <DataGridComboBoxColumn x:Name="cbSections" Header="Sections" SelectedItemBinding="{Binding Sections}"/>
    </DataGrid.Columns>
</DataGrid>

代码隐藏:

...
{
...
myDataGrid.ItemsSource = data;

cbSections.ItemsSource = new List<string> { "C50", "C40", "C30" }; 
...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM