2016-10-27 14 views
0

を防ぐことはできません。次のようにコントロールはデータローにバインドされています。私は、実行時にフォームをロードするとは、私は、これらのフィールドを持っている私のデータセットのデータテーブルを持って結合エラー

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. 

、これは(これが発生したエラーをスローラインでありますコード):

エラーは明らかですが、VBが新しい行からNull値を引き出すのを防ぐ方法がわかりません。私はブロックコンバータを作成し、UpdateSourceTrigger = Explicitを設定しようとしましたが、いずれも問題を解決しません。

+0

Nullableですか? 'Return CType(Me(Me.tableVehicleExpenses.CategoryIDColumn)、Long?)'を試してください。 – djv

+0

あなたはその列にヌル値がないと確信していますか? – Searching

+0

@Verdolineそれは私が書いたものではなく、生成されたコードなので、そこをめちゃくちゃにしてしまうのは非常に嫌です。いいえ、CategoryIDはnullableではありません。それは必須フィールドです。 @searching。 – SezMe

答えて

1

--update 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); 

     } 
    } 

直接table(存在する場合)でそのNull値を持つ行を削除想像します。 DataTable.NewRowは、columnのデフォルト値を持つ新しいDataRowを作成します(何も渡されないため)。確かなぜそれが代わりにmyApp.Tables("VehicleExpenses").NewRowのは、このオプションを試してみてください非NULL可能列

0としてデフォルト値を設定していないではない可能性

'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 

場合は、このモデルをコミットするために、別の保存ボタンと機能を追加する必要があります詳細をデータベースに保存します。

ご連絡ください。

+0

フィールドには 'AllowNulls = true'というプロパティがある場合にのみ' DBNull'を指定できます。それ以外の場合、デフォルト値はLong:0となります。 – djv

+1

絶対に。私はデータセットを再構築することは良いアイデアかもしれないと思います。 – Searching

+0

@Verdolino私はそれが正しいとは思わない。 1つは、プロパティページの任意のフィールドのデフォルト値を設定します。 AllowNullsプロパティに関係なく、すべてのフィールドの既定値は SezMe

関連する問題