Datatable.addrow Выбрасывает System.Data.Исключение EvaluateException

#c# #winforms #datatable

Вопрос:

Я искал в Интернете, и я видел, что это обычно происходит, когда есть несоответствие типа данных строки фильтра, но я только что добавлял новую строку в таблицу данных.

 var newInvoiceDetailRow = _Invoicing_DataSet.Sales_InvoiceListDetails.NewSales_InvoiceListDetailsRow();


                newInvoiceDetailRow.DateUpdated = DateTime.Now;
                newInvoiceDetailRow.Discount = 0;
                newInvoiceDetailRow.InvoiceListID = newInvoiceRow.ID;
                newInvoiceDetailRow.LineTotal = 0;
                newInvoiceDetailRow.OrderCode = row.OrderCode.ToString();
                newInvoiceDetailRow.OrderListDetailID = row.ID;
                newInvoiceDetailRow.PackagingQuantity = row.PackagingQuantity;
                newInvoiceDetailRow.PiecesPerPackaging = row.Pieces_Per_Packaging;
                newInvoiceDetailRow.ProductPrice = row.Price;
                newInvoiceDetailRow.Product_Code = row.Product_Code.ToString();
                newInvoiceDetailRow.Product_Name = row.Product_Name.ToString();
                newInvoiceDetailRow.Quantity = row.Quantity;
                newInvoiceDetailRow.UnitUsed = row.UnitUsed;
                newInvoiceDetailRow.UpdatedBy = CreatingUser.ToString();
                newInvoiceDetailRow.Seq = seq;

                _Invoicing_DataSet.Sales_InvoiceListDetails.AddSales_InvoiceListDetailsRow(newInvoiceDetailRow);
 
 System.Data.EvaluateException was unhandled
  HResult=-2146232032
  Message=Cannot perform '=' operation on System.Int32 and System.String.
  Source=System.Data
  StackTrace:
       at System.Data.BinaryNode.BinaryCompare(Object vLeft, Object vRight, StorageType resultType, Int32 op, CompareInfo comparer)
       at System.Data.BinaryNode.EvalBinaryOp(Int32 op, ExpressionNode left, ExpressionNode right, DataRow row, DataRowVersion version, Int32[] recordNos)
       at System.Data.BinaryNode.Eval(DataRow row, DataRowVersion version)
       at System.Data.DataExpression.Invoke(DataRow row, DataRowVersion version)
       at System.Data.Index.AcceptRecord(Int32 record, IFilter filter)
       at System.Data.Index.ApplyChangeAction(Int32 record, Int32 action, Int32 changeRecord)
       at System.Data.Index.RecordStateChanged(Int32 record, DataViewRowState oldState, DataViewRowState newState)
       at System.Data.DataTable.RecordStateChanged(Int32 record1, DataViewRowState oldState1, DataViewRowState newState1, Int32 record2, DataViewRowState oldState2, DataViewRowState newState2)
       at System.Data.DataTable.SetNewRecordWorker(DataRow row, Int32 proposedRecord, DataRowAction action, Boolean isInMerge, Boolean suppressEnsurePropertyChanged, Int32 position, Boolean fireEvent, Exceptionamp; deferredException)
       at System.Data.DataTable.InsertRow(DataRow row, Int64 proposedID, Int32 pos, Boolean fireEvent)
       at System.Data.DataRowCollection.Add(DataRow row)
       at Invoicing._Invoicing_DataSet.Sales_InvoiceListDetailsDataTable.AddSales_InvoiceListDetailsRow(Sales_InvoiceListDetailsRow row) 
 

Я занимаюсь этим уже некоторое время.
Не уверен, в чем проблема.
Буду признателен за любую помощь

Комментарии:

1. newInvoiceDetailRow.OrderCode = row.OrderCode.ToString(); ?

2. Я уже установил его в строку, и он все еще выдает ошибку. Я также попытался явно определить значения, и это все равно выдает ошибку. т. е. newInvoiceDetailRow. Качество упаковки = 0; Новое значение. Упаковка по частям = 0; newInvoiceDetailRow.ProductPrice = 0; newInvoiceDetailRow.Product_Code = «»; newInvoiceDetailRow.Product_Name = «»;

Ответ №1:

Нашел проблему.

В существующем источнике привязки был фильтр, который вызывал исключение. Когда строка была добавлена в таблицу данных, источник привязки, имеющий неправильный фильтр, сравнивает строку с int.

это смутило меня, так как строка, выдающая ошибку, была строкой добавления.