要在DataGrid中使用ComboBox,当然想到了用DataGridComboBoxColumn。

本来以为挺简单,结果网上看到的教程都是各种莫名其妙。然后我在这些个博客中逐个尝试,浪费了大量时间,非常窝火。。更过分的是看到一个博客内容写一些根本不能用的残缺内容,然后下面包含代码下载,竟然还要30个积分!!!!

最后我在微软官网找到了答案,这里我精简下DataGridComboBoxColumn的使用,希望有需要的朋友不要走弯路。。。

官方文档地址:

https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.datagridcomboboxcolumn?redirectedfrom=MSDN&view=netframework-4.7.2

前台代码:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:core="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <ObjectDataProvider x:Key="SexEnumKey" MethodName="GetValues" ObjectType="{x:Type core:Enum}">
            <ObjectDataProvider.MethodParameters>               
                <x:Type Type="local:SexEnum"/>   
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
        <DataGrid Name="DG1" ItemsSource="{Binding}" CanUserAddRows="False" AutoGenerateColumns="False">   
            <DataGrid.Columns>
                <DataGridComboBoxColumn Header="性别"  SelectedItemBinding="{Binding sex}" ItemsSource="{Binding Source={StaticResource SexEnumKey}}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

后台代码:

namespace WpfApp1
    public class Customer
        public SexEnum sex { get; set; }
    public enum SexEnum { 男,女 };
    public partial class MainWindow : Window
        ObservableCollection<Customer> custdata = new ObservableCollection<Customer>();
        public MainWindow()
            InitializeComponent();
            Customer cm = new Customer();
            cm.sex = SexEnum.男;
            custdata.Add(cm);
            DG1.DataContext = custdata;
                                    控件Datagrid是由多个表(table)组成的,table是由行(row)与列(column)组成的,行与列的交互,组成的一个个单元(cell)。我们的需要就是能控制每一个cell的变化,从而使row与column发生变化,最终形成table的变化。这每一种变化都可视为是Datagrid中table的一种风格格式(style)。我们在往form上部署Datagrid控件后,会在其属性...
                                    在使用DataGrid的时候,有时候需要使某些列为ComboBox,这时自然想到使用DataGridComboBoxColumn,但是如果使用的是ItemsSource数据绑定后台的对象,就会发现,这根本就不能用。
  首先,看有问题的代码:
后台代码:
using System.Windows;
using System.Collections.ObjectModel;
usi...
                                    介绍数据表格DataGrid的基础用法。
DataGrid可用AutoGenerateColumns属性控制列的生成。Column包含DataGridTextColumnDataGridCheckBoxColumnDataGridComboBoxColumnDataGridHyperlinkColumnDataGridTemplateColumn等5中格式。
1.DataGridTextColumn
DataGridTextColumn最常用,不再做介绍。
2.DataGridCheckBoxCol
方案也是改了又改, 从直接的 DataGridComboBoxColumnDataGridTemplateColumn的 CellEditingTemplate 再到这个完成 DataGridTemplateColumn的CellTemplate 加事件。终于完...
  if (entity.EditType == "DropDownList")
                    DataGridComboBoxColumn cob = new DataGridComboBoxColumn();
                    cob.Header = entity.Name;
网上查找很多方法都不理想,参考部分文章,找到理想的办法:
    <DataGrid x:Name="dgrid" Width="250" Grid.Row="0" CanUserSortColumns="True" CanUserDeleteRows="False" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn x:N