WPF DataGrid中的ComboBox如何绑定数据

在delphi时代,我都比较不喜欢直接在StringGrid上编辑数据,而且如果在这上面整个ComboBox的下拉选择框,那简直麻烦的要命。

用上WPF之后,我觉得应该直接在StringGrid上编辑了,否则的话,你在旁边就得拖出很多的TextBox和Combobox出来了,那么DataGrid就只剩下选定的作用了。

文本倒是很好说,ComboBox就麻烦了,怎么个麻烦法?Binding上去的数据没用!

1、新建一个List作为数据源,并将窗口的DataContex设为this.

 

 代码如下 复制代码

public ObservableCollection<Department> listDepartments{set;get;}

listDepartments = DB.GetCollection<Department>();

this.DataContext = this;

2、DataGrid中直接绑定listDepartments

 代码如下 复制代码

<DataGridComboBoxColumn Width="100" Header="专业组" SelectedValuePath="Name" TextBinding="{Binding Department}" ItemsSource="{Binding Path=listDepartments}" DisplayMemberPath="Name" />

上面的做法,是一般控件的数据绑定的方法,但是放在这里不灵了!

那就赶紧找解决方法,网上的东西一大堆,但是都不解决问题,大概说法有:

1、Combobox在DataGrid里面是没有DataContex的,因此就绑定不到TreeView.

2、Combobox在DataGrid只能绑定静态资源。

3、还有说Anccerster不对的。

去微软的MSDN看看:

使用下列选项之一,若要填充下拉列表,首先设置 ComboBox 的 ItemsSource 属性:
静态资源。 有关更多信息,请参见 StaticResource 标记扩展。
x: 静态代码实体。 有关更多信息,请参见 x:Static 标记扩展。
ComboBoxItem 类型的内联集合。

我靠,要求还真高,就只有以下三种情况可以:静态资源,静态代码实体,还有一个就是把你的List数据先转换成ComboBoxItem的集合。

那么,那种方法最方便呢,第二种:

先在资源中添加静态的实体,然后再Binding的时候引用资源,两步就搞定了:

 代码如下 复制代码

<Window.Resources>

       <CollectionViewSource x:Key="departments" Source="{Binding listDepartments}" />

   </Window.Resources>

<DataGridComboBoxColumn Width="100" Header="专业组" SelectedValuePath="Name" TextBinding="{Binding Department}" ItemsSource="{Binding Source={StaticResource departments}}" DisplayMemberPath="Name" />

哎,老费劲了。

时间: 2024-08-28 13:49:05

WPF DataGrid中的ComboBox如何绑定数据的相关文章

嵌入式开发-在Window CE 操作系统中,如何在DataGrid 中添加ComboBox 控件

问题描述 在Window CE 操作系统中,如何在DataGrid 中添加ComboBox 控件 最近在开发手持机,因为公司要求,将ERP 系统置入到手持机中,发现在Window CE 系统中,很多 控件都无法使用.譬如说,要在DataGrid 中添加列,要求在DataGrid 中操作数据,下拉的 ComBobox 就没有,也没有DataGridComBoBox 列,如何处理,请各位兄弟指教. QQ:870088133 解决方案 CE版的控件是精简的,很多功能都没有.需要自己实现. 你说的添加C

combo box-WPF中的combobox双向绑定问题

问题描述 WPF中的combobox双向绑定问题 我想当它发生改变的时候,我后台数值也会发生改变.于是我这样写: 运行都是OK的.可是我想让他真的变成绑定, 就是用itemssour = binding那个.怎么能修改下呢 解决方案 WPF的Combobox的ItemSource第二次绑定(更新)问题WPF 的COMBOBOX绑定(匿名类)WPF 数据绑定 combobox 解决方案二: http://www.cnblogs.com/mantian/archive/2013/01/22/2871

ComboBox如何绑定数据?大家给个思路.

问题描述 说明:我在程序中设置了一个ComboBox控件,希望连接sql数据库后,在下拉列表中显示所有数据库,不知道该如何实现,望大家能指点迷津!感谢! 解决方案 解决方案二:for(inti=0;i<ds.Tables[0].Rows.Count;i++){this.clb.Items.Add(ds.Tables[0].Rows[i]["name"].ToString());}解决方案三:数据库列表保存在master数据库中的sysdatabases表中,只要select*fr

gridview中checkbox控件绑定数据的问题(100分)

问题描述 我正在做一个权限设置的模块,希望通过gridview实现,设想是gridview的列是根据数据库的字段动态生成的每个列头就是数据库字段名,列中是控件checkbox,checkbox是否被选中根据数据库中另外一个表的数据现在的问题是能动态生成列了,但是怎么给checkbox控件绑定数据啊~~ 解决方案 解决方案二:你那一列是什么字段,Bit类型,还是Boolean型,解决方案三:先转换成模版列.绑定然后解决方案四:<asp:TemplateColumnItemStyle-Wrap=&quo

在 datagrid 中 当单元格的数据更改时,改变同行的一个单元格的内容

问题描述 当"名称"里的内容被修改时,要异步修改"编码"里的内容. 解决方案 解决方案二:是用的Easyui里面的gridview吗?解决方案三:单元格值更改事件写就行了,判断下列的值解决方案四:是datagrid数据表格解决方案五:vargcs=function(){$('#DMMC').change(function(){varobj=newObject();$.post(bootPATH+"Data_Dictionary/GetChineseSpel

如何在DataGrid中添加ComboBox的方法

有两中方法:1.修改 ColumnStyles 属性的值.2.在DataGrid里, 直接贴 Combo 控件. 如:Public MyCombo As New ComboBox()    Dim con As NewSqlConnection("server=myservername;uid=myid;pwd=mypassword;database=northwind")    Dim daEmp As New SqlDataAdapter("Select * From E

C# winform combobox 在绑定数据之后插入一项选择项

/// <summary> /// 填充comboboxB超医师 /// </summary> private void setDBPyhNameComboBox() { this.combPhy.DataSource = null; DBConnectioin dbc = new DBConnectioin(); SqlConnection conn = new SqlConnection(DBConnectioin.conStr); conn.Open(); //DbHelpe

向DataGrid控件中添加ComboBox控件

combobox控件|datagrid|datagrid控件   在前面看到了很多关于怎样向DataGrid中添加ComboBox控件的方法.使用的方法全部都是在VB6.0中的方法. 我还是要说说在CSND中发贴的朋友. 现在所谓的.NET编程人员,不知道是怎么了呢!只是停留在使用.NET的编程环境中.并没有真正的了解面向对象的.NET编程思想. 我现在就利用继承DataGridColumnStyle完成向DataGrid中添加ComboBox. 希望这样有助于大家了解真正的面向对象编程的思想.

在DataGrid中使用下拉列表框和设置焦点

datagrid|下拉|下拉列表 在DataGrid中简单使用下拉列表框 作者:Tushar Ameta 翻译:秋枫 在DataGrid中使用下拉列表问题.这篇文章讲了如何在 System.Windows.Forms.DataGrid中切入使用ComboBox控件.不过原文不全,无法调试,在这里为了说清楚点,对原文作了一些修改,整篇文章主要包括三方面的内容. 1. 在DataGrid中加入ComboBox列: 2. 把在DataGrid中的修改保存到对应的网格: 3. 设置DataGrid中网格