SQLite数据网格验证

时间:2017-04-01 02:33:40

标签: c# wpf sqlite combobox datagrid

我在WPF表单上有一个DataGridItemsSource属性设置为DataTable。这个DataTable是从SQLite表中填充的,我使用填充了DataGridTemplateColumn的{​​{1}}来显示其中一列。 ComboBox正确地显示了类 DummyClass 中的ComboBox(字符串)和DisplayMember(int)。但是,当我从SelectedValue中选择一个值时,ComboBox会在该行旁边显示验证错误(红色感叹号)。

我为DataGrid更改选择时添加了一个事件处理程序,以便我可以查看验证错误。验证错误显示为:

  

无法转换价值'1'。

其中“1”是在ComboBox中选择的任何索引。

导致此验证错误的原因是什么?

ComboBox

2 个答案:

答案 0 :(得分:1)

我刚刚解决了类似的问题但是在Windows窗体中的DataGrid对象。我正在使用SQLite表作为数据源。我从特定的SQLite表中分配了一个带有DisplayMember和ValueMember的DataGridViewComboBoxColumn。但是当我运行代码时,DataGrid没有显示DisplayMember值,我只能看到存储在绑定到DataGrid的表中的整数值。

原来,ValueMember表的SQLite数据类型与分配给DataGrid中组合框的字段的数据类型不匹配。查找表中的ValueMember字段设置为SQLite数据类型“Integer”。绑定到DataGrid表的SQLite表的组合框字段中的SQLite数据类型是SQLite类型'int'。

SQLite类型'Integer'映射到.Net System.Int64,其代码为typeof(Long)。

SQLite类型'int'映射到.Net System.Int32,其代码为typeof(int)。

所以我修改了SQLite表,以确保所有整数类型字段都是SQLite类型'int'。

然后我修改了我的C#DataSet代码,以便将所有整数类型字段设置为typeof(int)。

现在DataGridViewComboBoxColumn按预期运行。

答案 1 :(得分:0)

SQLite表中的列的类型为Long,其中我的observable集合属性的类型为int。这导致了数据验证错误。