none
使用Datatable作为数据源动态绑定datagird, ComboBox选择后不更新到DataTable中 RRS feed

  • 问题

  • 一. 目的:想通过datatable动态绑定datagrid,实现动态增加列(列数不定,行数不定),并且列中含有ComboBox下拉选项,用Enum定义范围,用户改变dataGrid时,可将数据传递给datatable,后台可根据datatable内容进行逻辑处理,均使用后台代码实现;

    二. 当前效果:除去含有ComBoBox下拉菜单的列,其余可以实现更改dataGrid时,可将变化传递给datatable(如“序号”列的更改都会保留);

    三. 未解决问题:1) 含有ComBoBox的列,默认为空,用鼠标左键点三次才能出现下拉菜单,可以选择;

                           2) 选择好ComBoBox列中的下拉菜单内容后,再次点击“增加Code”按钮,含有ComBoBox列的选择内容会被清空

                           3) 对“序号”列进行升序或降序排列时,含有ComBoBox列的选择内容会被清空

    困扰了好久,恳请大神帮忙!!!

    后台代码如下:

    public partial class 效果定义 : Window
        {
    
            DataTable dt = new DataTable();
            enum 效果
            {
                上升,
                下降,
                保持
            };
    
            public 效果定义()
            {
                InitializeComponent();
    
                  dt.Columns.Add(new DataColumn("序号", typeof(int)));
                  DataRow dr = dt.NewRow();
                  dr["序号"] = 1;
                  dt.Rows.Add(dr);
                  dataGrid.ItemsSource = dt.DefaultView;
                  dataGrid.AutoGenerateColumns = true;
      
            }
    
            private void 增加Code_Click(object sender, RoutedEventArgs e)
            {
                DataGridTemplateColumn column = new DataGridTemplateColumn();
                int i = dt.Columns.Count;
                
                dt.Columns.Add(new DataColumn("花样"+i.ToString(), typeof(效果)));          
                dataGrid.ItemsSource = null; //先解除绑定          
                dataGrid.ItemsSource = dt.DefaultView; //再次绑定
            }
    }

    前台代码:

        <Grid>
            <Grid Height="244" VerticalAlignment="Top" Margin="10,10,10,0">
                <DataGrid x:Name="dataGrid" Height="244" VerticalAlignment="Top" HorizontalAlignment="Left" Width="725" CanUserAddRows="True" />
            </Grid>



    • 已编辑 HaoQi 2016年8月31日 15:29
    2016年8月31日 15:26

答案

  • Hi HaoQi,

    根据你的描述,你需要达到那样的效果。我觉得关键点就是需要对

    1: 你不能简单的只增加表的结构,你需要动态创建 DataGridTemplateColumn 。

    2: 在列中增加Comboxkongjian。并设置它的 ItemsSource 和SelectedItem 绑定属性。

    3: 你的表结构(类)需要进行调整,增加显示选择项的字段绑定到Combox 的SelectedItem 属性。

    WPF中动态创建DataTemplate(参考内存中动态生成一个XAML,描述了一个DataTemplate):

    WPF中动态创建DataTemplate

    Best Regards,
    Li Wang


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年9月3日 7:19