2013-02-15 3 views
1

У меня есть таблица данных, которая содержит небольшое количество строк, как показано нижеDataTable Column.Expression Throw Ошибка

CH1 CH2 Ch3 CH4 CH5 
1 2 1 2 3 
3 3 1 2 3 
3 3 1 1 2 
1 3 3 3 3 
1 2 3 3 0 
3 3 1 2 0 
3 3 1 1 2 

затем я пытаюсь добавить новый столбец как

Dim col As New DataColumn("VCH1", GetType(Decimal),"(CH1+CH2+ch3)/CH5") 
DtReadings.Columns.Add(col) 

в то время дать мне ошибку: Пытались делим на ноль. Из-за CH5 имеют нулевые значения, , но мне нужно добавить Dynamic Column с другим выражением во время выполнения, как избежать такого типа ошибок. Любая идея, пожалуйста, помогите.

Значение выражения не определено, Пользователь Создать выражение для динамического столбца. не только обрабатывать деление на ноль ошибок, для обработки всех типов вычисления ошибки

+1

Так что же вы хотите, чтобы это произошло, когда вы делите на ноль? –

+0

Это вопрос C# или VB? – CloudyMarble

+0

Этот VB-код? –

ответ

0

Вы можете поймать DivideByZeroException, а затем присвоить значение, которое вы хотите:

Try 
    col = New DataColumn("VCH1", GetType(Decimal), "(CH1+CH2+ch3)/CH5") 
Catch ex As DivideByZeroException 
    col = New DataColumn("VCH1", GetType(Decimal), "0") 
End Try 

DtReadings.Columns.Add(col) 
+0

Не уверен, что это когда-нибудь будет работать. Сначала я думаю, что исключение будет выбрано при добавлении времени не при построении столбца, во-вторых, нулевое значение будет только в некоторых строках, и вы попытаетесь добавить значение по умолчанию для полного столбца – Steve

+0

@Steve Humm ... вы правильно. Мышление ... – SysDragon

1

Синтаксис Expression разрешить использование оператора IIF
Вы можете создать свой DataColumn с помощью такого рода синтаксис для выражения

col = New DataColumn("VCH1", GetType(Decimal), "IIF(CH5 = 0, 0, (CH1+CH2+ch3)/CH5)") 

конечно, будучи Expression строка собственно вы могли бы динамически строить свое выражение на основе конкретного требования, которое у вас есть на данный момент. С помощью IIF или ISNULL вы можете создать свою строку на лету перед добавлением столбца. Что-то вроде этого псевдокода

Dim currentExpression as String = BuildCurrentExpression() 
col = New DataColumn("VCH1", GetType(Decimal), currentExpression) 
+0

Выражение будет немного сложнее, так как OP говорит, что эта формула является динамической. – SysDragon

+0

Моя проблема - выражение динамическое, это (CH1 + CH2 + ch3)/CH5, например, – Pranav1688

+0

У меня возникла идея mr. steve, но, надеюсь, OP получит это ': D' – spajce

0

Просто создать один добавочный номер для решить мою проблему, это займет время, но я не имею никакую проблему

<Extension()> 
Public Function ToCompute(value As DataTable, exp As String, inputColumn As String) As DataTable 
    Dim tempdt As New DataTable 
    tempdt = value.Clone 
    tempdt.Columns(inputColumn).Expression = exp 
    For Each row As DataRow In value.Rows.Cast(Of DataRow).ToList 
     Try 
      tempdt.Rows.Add(row.ItemArray) 
      value.Rows(value.Rows.IndexOf(row))(inputColumn) = tempdt.Rows(0)(inputColumn).ToString 
      tempdt.Rows.Clear() 
     Catch ex As Exception 
      tempdt.Rows.Clear() 
      value.Rows(value.Rows.IndexOf(row))(inputColumn) = 0 
      Continue For 
     End Try 
    Next 
    Return value 
End Function 
Смежные вопросы