DataSet ne prend pas en charge System.Nullable exception en c #

public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { RST_DBDataContext db = new RST_DBDataContext(); var d = (from s in db.TblSpareParts select new { s.SPartName, s.SPartCode, s.ModelID, s.SPartLocation, s.SPartActive, s.SPartSalePrice }).ToArray(); CrystalReport1 c = new CrystalReport1(); c.SetDataSource(d); crystalReportViewer1.ReportSource = c; } } 

J’essaie de générer un rapport de cristal dans la table SQL. SPartSalePrice est nullable en raison de celui de c.SetDataSource (d); exception venir s’il vous plaît le résoudre

Utilisez les opérateurs de fusion ou conditionnels nuls de votre projection anonyme pour mapper le null :

Coalescence:

 var d = (from s in db.TblSpareParts select new { s.SPartName, ..., SPartSalePrice = s.SPartSalePrice ?? 0.0, ... }).ToArray(); 

Conditionnel (pas vraiment utile pour les valeurs nulles, mais utile pour projeter d’autres valeurs)

  SPartSalePrice = s.SPartSalePrice == null ? 0.0 : s.SPartSalePrice, 

Un nom doit être atsortingbué au champ (j’ai conservé l’original, SPartSalePrice ), et le type de substitution ( 0.0 ) doit correspondre au type du champ.

Peut-être qu’une de vos valeurs d’object est Null. essayez quelque chose comme ça

  private void Form2_Load(object sender, EventArgs e) { RST_DBDataContext db = new RST_DBDataContext(); var d = (from s in db.TblSpareParts select new { s.SPartName?? DBNull.Value, s.SPartCode?? DBNull.Value, s.ModelID ?? DBNull.Value, s.SPartLocation ?? DBNull.Value, s.SPartActive ?? DBNull.Value, s.SPartSalePrice ?? DBNull.Value, }).ToArray(); CrystalReport1 c = new CrystalReport1(); c.SetDataSource(d); crystalReportViewer1.ReportSource = c; } 

Essaye ça :

 public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { RST_DBDataContext db = new RST_DBDataContext(); var d = (from s in db.TblSpareParts select new { s.SPartName, s.SPartCode, s.ModelID, s.SPartLocation, s.SPartActive, newPartSalePrice = s.SPartSalePrice == null ? 0 : s.SPartSalePrice }).ToArray(); CrystalReport1 c = new CrystalReport1(); c.SetDataSource(d); crystalReportViewer1.ReportSource = c; } } 

vous devriez vérifier null dans la sélection avec

 s.SPartSalePrice == null ? 0 : s.SPartSalePrice 

si elle est nulle ou non si elle est nulle, elle retournera 0 sinon elle retournera la valeur et l’affectera à la nouvelle variable

 newPartSalePrice = s.SPartSalePrice == null ? 0 : s.SPartSalePrice 

Le type de données iF est Ssortingng puis

 SPartSalePrice =s.SPartSalePrice == null ? "" : s.SPartSalePrice; 

qui affiche vide si les données sont nulles sinon montrent les données.

Si le type de données est int alors

 PartSalePrice = s.SPartSalePrice == null ? 0 : s.SPartSalePrice 

Vérifiez dans votre classe si vous n’avez qu’un seul atsortingbut nullable comme celui-ci: décimal? , mettez-le en décimal. Pour tous vos atsortingbuts qui ont le point d’interrogation dans leur déclaration, supprimez simplement le point d’interrogation et exécutez-le.