Истоник данных DataTable и nullable поля

Обсуждение Stimulsoft Reports.NET
Ответить
rvaider
Сообщения: 3
Зарегистрирован: 05 ноя 2013, 09:03

Истоник данных DataTable и nullable поля

Сообщение rvaider »

Добрый день.

В качестве источника данных имеется datatable, в котором могут быть null значения. Соответственно в отчете хочется их видеть как пустые.

Пример для воспроизведения:

Код: Выделить всё

            
var d = new DataTable("test");
var dc = new DataColumn("x", typeof (decimal));
dc.AllowDBNull = true;
d.Columns.Add(dc);
d.Rows.Add(1);
d.Rows.Add(DBNull.Value);

var report = new StiReport();
report.RegData(d);
report.Design();
При добавлении поля в отчет второе значение будет 0, а не пустое.
При этом отчет определяет тип поля как decimal. Если сменить его в дизайнере на Nullable<decimal>, то все отображается как нужно.
Однако при повторном открытии дизайнера (либо после вызова report.Dictionary.Synchronize()) тип поля снова меняется на decimal.

Можно ли сделать чтобы автоматически выставлялся тип поля Nullable<> для колонок datatable с установленным свойством AllowDbNull?
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Истоник данных DataTable и nullable поля

Сообщение Aleksey »

Здравствуйте,

Извините за задержку с ответом.
Необходимо дополнительное время для анализа проблемы.

Спасибо.
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Истоник данных DataTable и nullable поля

Сообщение HighAley »

Здравствуйте, Дмитрий.

На данный момент используется datacolumn.AllowDBNull, но из-за проблем с дата-адаптерами и провайдерами пока только для DateTime.
Вы можете делать проверку на null следующим образом:

Код: Выделить всё

MyDataSource["MyField"] == DBNull.Value 
Пока только так.

Спасибо.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

Re: Истоник данных DataTable и nullable поля

Сообщение Леонид »

Добрый день!

Внесу свои два цента. Stimul здесь вообще не причём, Null и DBValue.Null это две разные вещи, подробнее можете почитать об этом, например, здесь http://stackoverflow.com/questions/4958 ... null-value.

В своих отчётах мы используем такую конструкцию для Nullable DateTime:

Код: Выделить всё

string facturaDate = (qrMain.FACTURA_DATE != null ? qrMain.FACTURA_DATE.Value.ToShortDateString() : string.Empty);
Замечу, что свойство .Value есть только у DateTime (Nullable) полей, у обычных (Not null) его нет. Это весьма удобное свойство, а определить конкретно для вашей таблицы или stored procedure является ли поле nullable или нет нельзя, т.к. выборка может возвращать что угодно, в зависимости от логики процедуры (или select'а).
Ответить