none
请教DataGrid使用DataGridTemplateColumn时绑定数据失败的问题 RRS feed

  • 问题

  • 现在我需要使用DataGrid读入一个员工表,表中有员工所属部门的字段。我要的效果是“所属部门”字段在DataGrid中展示时是文本,双击编辑时变为一个ComboBox选择。 此外,这个部门ComboBox里的内容是由另一个模块提供,不是静态数据。

    我的xaml是:

    <DataGridTemplateColumn Header="所属部门" Width="200" >
         <DataGridTemplateColumn.CellTemplate>
               <DataTemplate>
                    <TextBlock Text="{Binding emp_depart}"/>
               </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
         <DataGridTemplateColumn.CellEditingTemplate>
               <DataTemplate>
                    <ComboBox Name="cbColDepartName" ItemsSource="{Binding Source=DepartSource, Path=DepartPath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="ID" DisplayMemberPath="Name" SelectedItem="{Binding emp_depart}" IsSynchronizedWithCurrentItem="False" SelectedIndex="0" />
               </DataTemplate>
         </DataGridTemplateColumn.CellEditingTemplate>
    </DataGridTemplateColumn>

    我创建了一个类:

    public class DepartName
            {
                public int ID { get; set; }
                public string Name { get; set; }
            }
            public class DepartSource : INotifyPropertyChanged
            {
    
                private ObservableCollection<DepartName> _departPath = null;
                public ObservableCollection<DepartName> DepartPath
                {
                    get
                    {
                        return _departPath;
                    }
                    set
                    {
                        this._departPath = value;
                        OnPropertyChanged("DepartPath");
                    }
                }
    
                public event PropertyChangedEventHandler PropertyChanged;
                protected void OnPropertyChanged(string propertyName)
                {
                    if (string.IsNullOrEmpty(propertyName)) throw new ArgumentNullException("propertyName");
                    PropertyChangedEventHandler handler = PropertyChanged;
                    if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
                }
            }

    当后端系统把部门信息送给我时,我填数据:

    DepartSource departSource = new DepartSource();
    //ocDepartName 是后端模块供给,里面是部门列表,类型是ObservableCollection<DepartName>
    departSource.DepartPath = ocDepartName;

    实际运行时,没有达到我想要的效果,当我使用DataGrid.CanUserAddRows=true创建新一行,双击编辑部门信息时,combobox是空的,里面什么也没有。

    请问这个问题有什么解决方法?

    谢谢。

    2015年1月20日 13:45

全部回复

  • 你好:

    ASP.NET 的问题最好发布到这个论坛,我帮你把它移过来。


    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.

    2015年1月21日 3:08
  • 您好,我的问题是在用WPF写windows窗体时遇到的,应该不算ASP.net的问题吧?
    2015年1月21日 5:09
  • 不好意思,没有看仔细,论坛版主稍后会移到WPF论坛去,WPF板块的engineer会给你提供一些帮助。

    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.

    2015年1月21日 9:01