DataSet не поддерживает System.Nullable <> - PullRequest
2 голосов
/ 06 июня 2011

У меня есть приложение, в котором есть btn для предварительного просмотра отчета в Crystal Report.Я добавил набор данных в качестве источника данных отчета, перетащил их с панели инструментов и добавил необходимые поля в виде столбцов.Я получил инструкцию по этой ссылке http://aspalliance.com/2049_Use_LINQ_to_Retrieve_Data_for_Your_Crystal_Reports.2. Это мой второй отчет, первый работает и не сталкивался с какой-либо проблемой, поэтому я запутался, не говоря уже о том, что в нем также есть столбец, который можно обнулять.ошибка говорит: DataSet не поддерживает 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);
    }

Ошибка в той части, где я устанавливаю отчет источника данных. SetDataSource

 public bool SetReportPathFile(string reportPathFile, IEnumerable enumerable)
    {

            string reportFolder = @"\CrystalReportViewer\Reports\";
            string filename = System.Windows.Forms.Application.StartupPath + reportFolder + reportPathFile;  // "\\Reports\\CrystalReports\\DateWiseEmployeeInfoReport.rpt";
            ReportPathFile = filename;
            report.Load(ReportPathFile);
            report.SetDataSource(enumerable);
            report.SetDatabaseLogon("sa", "admin007");
            bRet = true;
       }

        _IsLoaded = bRet;

        return bRet;
    }

Я прочитал некоторые ответы и сказал, что я должен установить нулевое значение DBNUll, что я сделал в окне свойств каждого столбца, если он обнуляем.Кто-нибудь может мне помочь?спасибо

Ответы [ 3 ]

4 голосов
/ 26 августа 2013

Ваш вопрос можно увидеть в этом посте, но в общем виде ... таким образом, вы можете передать объект в наборе данных DataSet!

.NET - преобразование общего набора в таблицу данных

0 голосов
/ 23 сентября 2013
foreach (PropertyDescriptor property in properties)
{
    dt.Columns.Add(property.Name, Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType);
}
0 голосов
/ 09 июня 2011

разобрался.с помощью коллекции расширений, скопированных куда-то, я забыл ссылку.Если кто-то, кто создал этот класс, кредитует вас.

метод класса выглядит следующим образом.

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;
    }
 }

тогда вы можете использовать его, получая источник в своем отчете:

 private DataSet GenerateNeutralContEducReport(string dsName)
    {
        var contEduHistoryList = FileMaintenanceBusiness.Instance.GetManyNeutralFMContEducHistoryInfobyKeyword(CurrentNeutralFM.NeutralID, "NeutralID").ToList();
       return CollectionExtensions.ToDataSet<tblContinuingEducationHistory>(contEduHistoryList, dsName);
    }
...