2010-05-15 6 views
1

В таблице данных есть три столбца A,B and C. Теперь каждый столбец является типом decimal. Теперь я делаю как dt.Columns["A"].Expression="B+C";, чтобы добавить запись колонок B и запись столбца C. Теперь, если есть какое-то значение B or C является null затем добавление B и C будет нулевым, как величина B является 3 и значением C является null для первой строки, тем B+C(3+null) будет null, который не является подходящим, результат сложения должен быть 3. Если я заменяю 0 вместо null то будет ok.but везде, где есть нулевое значение в записях должно быть оставаться это и не должно быть заменено 0 .То есть нулевое значение не следует заменить 0 и когда добавление нулевого значения выполняется с любым десятичным значением null значение должно рассматриваться как 0.Нулевое значение должно рассматриваться как 0, когда его добавление выполняется с десятичным значением

Возможно ли, как мы можем это сделать?

EDIT Смотрите следующий ответ где dt.Rows[0]["B"] = DBNull.Value; , но у меня есть проблема, как по моему коду, я не могу назначить DBNull.Value непосредственно dt.Rows[0]["B"] = DBNull.Value; я должен хранить в одной переменной типа object как Object obj; obj=DBNull.Value и затем это значение переходит к таблице. Затем оно дает ошибку, например null value can not be stored to the column B.

+2

Ваш босс просит вас то, что продажи за январь. 1,6 миллиона, вы отвечаете. Февраль? 2,1 миллиона. Март? Я не знаю. Какова сумма за квартал? Является ли ответ 3,7 миллиона, или «я не знаю»? Отвечая на 3,7 миллиона, когда вы не знаете, какие продажи в марте были * лежат *. Вы уверены, что хотите заменить ноль на null? Это означает, что любое количество, которое вы не знаете, равно нулю; реальная величина может быть нигде не близка к нулю. –

ответ

2

Попробуйте что-нибудь подобное

dt.Columns["A"].Expression = "ISNULL(B, 0) + ISNULL(C, 0)"; 

Полный рабочий тест:

DataTable dt = new DataTable(); 
dt.Columns.Add("A", typeof(decimal)); 
dt.Columns.Add("B", typeof(decimal)); 
dt.Columns.Add("C", typeof(decimal)); 

dt.Rows.Add(); 
dt.Rows[0]["B"] = DBNull.Value; 
dt.Rows[0]["C"] = 3; 

dt.Columns["A"].Expression = "ISNULL(B, 0) + ISNULL(C, 0)"; 
Console.WriteLine(dt.Rows[0]["A"]); 
+0

@ Энтони Пеграм, сэр, Что значит для '?' И что значит 'a ?? 0 + b ?? 0' делать? – Harikrishna

+0

@ Anthony, сэр это дает ошибку 'DataSet не поддерживает System.Nullable <>.' – Harikrishna

+0

Я обновил ответ. Оригинальный пост не подходил для того, что вы пытались сделать, извиняюсь. –