Решить исключение NullReference - PullRequest
0 голосов
/ 09 июля 2011

Я использую Crystal Report для реализации отчетов в моем приложении c # windows. Я создаю форму, чтобы показать предварительный просмотр отчета. Я использую следующий код для отображения предварительного просмотра:

private ReportDocument _reportDocument;
public CrystalReportPrintPreviewForm(ReportDocument reportDocument)
{
    InitializeComponent();

    _reportDocument = reportDocument;
}
private void CrystalReportPrintPreviewForm_Load(object sender, EventArgs e)
{
    if(_reportDocument!=null)
    crystalReportViewer1.ReportSource = _reportDocument;
}

А также я использую следующий код, чтобы отправить «ReportDocument» в эту форму и показать его:

ReportDocument reportDocument = new ReportDocument();
reportDocument.Load(Application.StartupPath + "\\Reports\\WorkGroupReport.rpt");
kargarBandarDataset.WorkGroup.DefaultView.RowFilter = workGroupBindingSource.Filter;
reportDocument.SetDataSource(kargarBandarDataset.WorkGroup.DefaultView.ToTable());
reportDocument.SetParameterValue("CurrentDate",shamsi.ShamsiDate());

CrystalReportPrintPreviewForm crystalReportPrintPreview = new CrystalReportPrintPreviewForm(reportDocument);
crystalReportPrintPreview.ShowDialog();

Иногда я получаю сообщение об ошибке NullReferenceException в следующей строке кода:

crystalReportPrintPreview.ShowDialog();

Как я могу решить эту проблему?

Ответы [ 4 ]

1 голос
/ 09 июля 2011

Нет точного ответа о том, как обрабатывать исключение NullReferenceException. Удостоверьтесь, что вы включили «кэширование» брошенных ожиданий в VS (Debug-> Exception mark> Common Language Runtime), найдите место, где ожидание будет выброшено, и попытайтесь понять причины.

Также попытайтесь получить как можно больше информации из свойства .Message в Exception.

Обычно NullReference вызывается некоторыми нулевыми аргументами, передаваемыми методу или конструктору класса. Попробуйте отладить и посмотреть, что вы передаете объекту, который выдает исключение;

0 голосов
/ 09 июля 2011

Как и первый шаг, я бы посоветовал убедиться, что в VS включена обработка исключений.

У меня на руках нет ПК, но это должно быть что-то вроде:

Debug-> Исключения

Появляется диолог, где вы можете проверить интересующие вас исключения. Если это не работает, вы можете попробовать способ, предложенный @ Marlyn

Надеюсь, это поможет.

0 голосов
/ 09 июля 2011

Я с подозрением отношусь к вашему коду параметра:

reportDocument.SetParameterValue("CurrentDate",shamsi.ShamsiDate);

Если параметр соответствует дате без данных, то это может быть источником вашего нулевого значения.

0 голосов
/ 09 июля 2011

Вы уверены, что crytsalReportPrintPreview был создан?Если строка

crystalReportPrintPreview.ShowDialog();

является строкой, которая фактически выдает ошибку, исключение NullReference, по-видимому, указывает на то, что crystalReportPrintPreview имеет значение null.

Также необходимо проверить, является ли reportDocument нулевым или нет- возможно, источник данных по какой-то причине является нулевым).Я бы добавил следующее в ваш код:

if (reportDocument == null)
{
    throw new Exception("reportDocument is null!");
}
else
{
    // put your CrsytalReportPrintPreviewForm code here
}
...