我的数据集中有一个包含以下字段的数据表:
我有一个wpf窗口,用户将数据输入到与这些字段对应的控件中。控件绑定到数据行,如下所示:
DataContext = myApp.Tables("VehicleExpenses").NewRow
当我在运行时加载表单时,我收到此错误:
System.InvalidCastException was unhandled by user code
HResult=-2147467262
Message=Conversion from type 'DBNull' to type 'Long' is not valid.
这是抛出错误的行(这是生成的代码):
Return CType(Me(Me.tableVehicleExpenses.CategoryIDColumn),Long)
所以错误是显而易见的,但我不知道如何防止VB从新行中提取Null值。我已经尝试编写阻塞转换器并设置UpdateSourceTrigger = Explicit但是都没有解决问题。
答案 0 :(得分:1)
- 更新1 -
不要被Dataset
和此模型弄糊涂。该中间层用于用户交互和验证目的。将数据保存到db是2 stages。您仍然需要自动生成的CRUD
操作属性和方法。
想象一下这种可能性(这是c#)
public class Vehicle
{
public int VehId{get;set;}
public Vehicle(){}
public bool SaveToDb()
{
MyDataSet myDataSet = new MyDataSet();
myDataSet.VehicleExpenses newVehRow = myDataSet.VehicleExpenses.NewVehicleExpensesRow();
newVehRow.VehId = this.VehId;
myDataSet.VehicleExpenses.Rows.Add(newVehRow);
// Save the new row to the database
myDataSet.Update(this.myDataSet.VehicleExpenses);
}
}
直接删除Null
中table
值的行(如果存在)。
DataTable.NewRow
创建一个新的DataRow
,其column
默认值(因为没有传递任何内容)。不确定为什么它没有为非可空列
如果可能,请尝试使用此选项代替myApp.Tables("VehicleExpenses").NewRow
'declare a VehicleExpenses in the form (you might have to create this class)
Dim blankMo As VehicleExpenses
' in Form_load() set this object with new VehicleExpenses and against Datacontext
blankMo = New VehicleExpenses()
DataContext = blankMo
您需要添加一个单独的保存按钮和功能,以将此模型详细信息提交到数据库。
告诉我们..