棒棒牛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 471|回复: 2

[问题] WPF DataGrid 编辑模式 Datetime字段值为空白 [复制链接]

V1

Rank: 1

游币
100
金币
112
经验
18
积分
25
帖子
11
发表于 2011-11-29 11:14:11 |显示全部楼层
各位大神好:
        请教个问题。跪求解答。
        小弟用WPF的DataGrid控件做了一个数据库数据编辑的小Demo程序,由于数据表字段未知,只能采用DataTable.DefaultView的形式,给DataGrid设置ItemsSource。我根据DataTable的Structure,那个代码创建了DataGrid的Column,设置每个Column的Binding为TwoWay(为了后面取到数据),设置UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged以保证每次数据修改都会被更新到ItemsSource对应的那个DataRowView里面去。然后用DataGrid.RowEditEnding事件,获取到最新被修改的行的DataRowView对象,从而得到被修改后的值。
        经过测试,对int,double,float,string的数据支持都没问题,但是对datetime的数据就出现问题了。datetime的数据,在RowEditEnding事件取到的DataRowView里面,这个字段的值始终是空白的(不是null)。导致了这个字段的值无法被更新到数据库中。
        先后尝试过用代码产生TemplateColumn,然后设置CellEditTemplate的VisualTree为一个DateTimePicker控件,但是获取到的值仍然是空白的,用Text控件也测试过,取到的值也是空白的。如果不用模板列,就用DataGrid自己创建的输入框输入,输入框在输入过程中会出现红色边框,然后提交之后这个Datetime列还是空白的。各种尝试都失败了。
        因此在这里发帖,跪求各位大神帮忙出出主意,以解决这个问题。先谢谢各位了。
学习使人进步

V1

Rank: 1

游币
100
金币
112
经验
18
积分
25
帖子
11
发表于 2011-11-29 15:01:08 |显示全部楼层
        问题我找到了,因为我的数据库是mysql,mysql的datetime类型,在CSharp里面的隐射类型是MySql.Data.Types.MySqlDateTime,而不是System.DateTime,当DataGrid在编辑了MySqlDateTime类型的值之后,由于无法自动转换成MySqlDateTime类型,就出现了验证错误。我尝试把验证错误信息显示出来之后发现,的确是类型转换的问题。

        知道了问题所在,我的解决方案就是用System.DateTime来替代MySqlDateTime,从而让DataGrid可以成功转换。我在DataTable的Columns上做了下处理,把所有MySqlDateTime的列先建一个对应的System.DateTime的列,然后把值拷贝过去,删除掉MySqlDateTime列,最好将列命名为被删掉的列的名称,再赋值给DataGrid.ItemsSource,DataGrid就能正常工作了。

        虽然问题解决了,但是还是希望各位大神能提供其他的办法,比如实现自动的类型转换处理等等。我这个方案,实在是有点麻烦。

        跪求各位大神的回复。
学习使人进步

版主

WPF_1.5_ray

Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

游币
259
金币
586
经验
1690
积分
2179
帖子
429

2011 年度优秀版主 2010 年度优秀版主

发表于 2012-1-10 12:06:30 |显示全部楼层
试试用TemplateColumn+Converter
What is real?
您需要登录后才可以回帖 登录 | 注册

bbniu.com (湘ICP备06008909号)  

GMT+8, 2012-5-21 21:10

Copyright © 2009-2011 bbniu.com. All Rights Reserved.

回顶部