Frameworks 数据集不支持System.Nullable<&燃气轮机;

Frameworks 数据集不支持System.Nullable<&燃气轮机;,frameworks,crystal-reports,dataset,entity,nullable,Frameworks,Crystal Reports,Dataset,Entity,Nullable,我有一个应用程序,其中有btn预览水晶报告作出的报告。我将Dataset添加为报表的数据源,并从工具箱中拖动datatable,并将所需的字段添加为列。我从这个链接得到了指示http://aspalliance.com/2049_Use_LINQ_to_Retrieve_Data_for_Your_Crystal_Reports.2。这是我的第二份报告,第一份有效,没有遇到任何问题,这就是为什么我感到困惑的原因,更不用说它还有可为空的列。错误为:数据集不支持System.Nullable。

我有一个应用程序,其中有btn预览水晶报告作出的报告。我将Dataset添加为报表的数据源,并从工具箱中拖动datatable,并将所需的字段添加为列。我从这个链接得到了指示http://aspalliance.com/2049_Use_LINQ_to_Retrieve_Data_for_Your_Crystal_Reports.2。这是我的第二份报告,第一份有效,没有遇到任何问题,这就是为什么我感到困惑的原因,更不用说它还有可为空的列。错误为:数据集不支持System.Nullable。

  private void ShowReportView()
    {

        string reportFile = "JudgeInfoFMReport.rpt";
        ObservableCollection<tblJudgeFileMaint> judgeFileMaintList;

        judgeFileMaintList = GenerateReport();

        if (judgeFileMaintList.Count > 0)
        {
            CrystalReportViewerUC crview2 = new CrystalReportViewerUC();
            crview2.SetReportPathFile(reportFile, judgeFileMaintList);
            crview2.ShowDialog();
        }
        else
        {
            System.Windows.MessageBox.Show("No record found.", module, MessageBoxButton.OK, MessageBoxImage.Information);
        }
    }

private ObservableCollection<tblJudgeFileMaint> GenerateReport()
    {
        var result = FileMaintenanceBusiness.Instance.GetAllJudgeInfoList();
        return new ObservableCollection<tblJudgeFileMaint>(result);
    }

我读了一些答案,并说我应该将null值设置为DBNUll,如果它可以为null,我在每个列的属性窗口中都这样做了。有人能帮我吗?谢谢

把它弄明白了。通过使用某个地方复制的CollectionExtension,我忘记了链接。无论是谁上的课,都要归功于你

类方法如下所示

public statis class CollectionExtension {
      public static DataSet ToDataSet<T>(this IEnumerable<T> collection, string dataTableName)
    {
        if (collection == null)
        {
            throw new ArgumentNullException("collection");
        }

        if (string.IsNullOrEmpty(dataTableName))
        {
            throw new ArgumentNullException("dataTableName");
        }

        DataSet data = new DataSet("NewDataSet");
        data.Tables.Add(FillDataTable(dataTableName, collection));
        return data;
    }
 }
公共统计类集合扩展{
公共静态数据集ToDataSet(此IEnumerable集合,字符串dataTableName)
{
if(集合==null)
{
抛出新的ArgumentNullException(“集合”);
}
if(string.IsNullOrEmpty(dataTableName))
{
抛出新ArgumentNullException(“dataTableName”);
}
数据集数据=新数据集(“新数据集”);
data.Tables.Add(FillDataTable(dataTableName,collection));
返回数据;
}
}
然后,您可以通过以下方式使用它将您的源代码添加到报告中:

 private DataSet GenerateNeutralContEducReport(string dsName)
    {
        var contEduHistoryList = FileMaintenanceBusiness.Instance.GetManyNeutralFMContEducHistoryInfobyKeyword(CurrentNeutralFM.NeutralID, "NeutralID").ToList();
       return CollectionExtensions.ToDataSet<tblContinuingEducationHistory>(contEduHistoryList, dsName);
    }
专用数据集GenerateNeutralContEducReport(字符串dsName)
{
var contEduHistoryList=FileMaintenanceBusiness.Instance.getManyNeutralFMConteduchHistoryInfoByKeyword(CurrentNeutralFM.NeutralID,“NeutralID”).ToList();
返回CollectionExtensions.ToDataSet(contEduHistoryList,dsName);
}

你的问题可以在这篇文章中看到,但一般来说。。。这样,您就可以将对象传递给类型化的数据集


我发现其他建议的答案对我帮助不大,但这个解决方案奏效了。 解决此问题的另一种方法是使数据列为空

 DataColumn column = new DataColumn("column", Type.GetType("System.Int32"));
 column.AllowDBNull = true;
 dataTable.Columns.Add(column);

这实际上并没有回答您的问题(
FillDataTable()
缺失),但它确实:
foreach (PropertyDescriptor property in properties)
{
    dt.Columns.Add(property.Name, Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType);
}
 DataColumn column = new DataColumn("column", Type.GetType("System.Int32"));
 column.AllowDBNull = true;
 dataTable.Columns.Add(column);