无法阻止绑定错误

时间:2016-10-27 19:15:17

标签: wpf vb.net

我的数据集中有一个包含以下字段的数据表:

enter image description here

我有一个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但是都没有解决问题。

1 个答案:

答案 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);

        }
    }

直接删除Nulltable值的行(如果存在)。 DataTable.NewRow创建一个新的DataRow,其column默认值(因为没有传递任何内容)。不确定为什么它没有为非可空列

将默认值设置为0

如果可能,请尝试使用此选项代替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  

您需要添加一个单独的保存按钮和功能,以将此模型详细信息提交到数据库。

告诉我们..