void SetOrderItemFromListViewItem(BasicDataSet.OrderItemRow Row, ListViewItem lvItem, int i) { MenuItemForTag item = (MenuItemForTag)lvItem.Tag; Row.No = (decimal)item.No; Row.ProductID = item.productID; Row.Price = (decimal)item.Price; Row.Index = (short)i; if (item.classcode == MyConstant.CanDiscountClass) { Row.Discount = true; } else { Row.Discount = false; } }
private void SaveOrder() { if (FormOnlyForCheck) { return; } bool IsNewRecord = (CurrentOrder.RowState == DataRowState.Detached); CurrentOrder.InvoiceID = Int32Parse(mtbInvoiceID.Text); CurrentOrder.ServantID = Int32Parse(mtbServant.Text); CurrentOrder.PeopleNo = (byte)Int32Parse(comboBoxPeopleNo.Text); CurrentOrder.OrderID = Int32Parse(mtbOrderNo.Text); CurrentOrder.Deduct = Int32Parse(mtbDeduct.Text); CurrentOrder.Income = (decimal)CalcTotal(); CurrentOrder.CreditID = Int64Parse(mtbCreditID.Text); if (checkDiscount.Checked) { CurrentOrder.DiscountRate = 0.88M; } else { CurrentOrder.DiscountRate = 1M; } CurrentOrder.TableID = textBoxTable.Text; if (CurrentOrder.IsSaveTimeNull()) { CurrentOrder.SaveTime = DateTime.Now; } if (CurrentOrder.SaveTime.Year < 2007) // 初值設成 2000.1.1 { CurrentOrder.SaveTime = DateTime.Now; } try { if (IsNewRecord) // get autonumber 處理如此複雜,只好忍痛把AutoNumber 拿掉 { DataSet1.Order.AddOrderRow(CurrentOrder); } // Update OrderItem try { int count = lvNoDiscount.Items.Count + lvCanDiscount.Items.Count; BasicDataSet.OrderItemRow[] ItemRows = new BasicDataSet.OrderItemRow[count]; // OrderDetail = CurrentOrder.GetOrderItemRows(); if (OrderDetail != null) { foreach (BasicDataSet.OrderItemRow Row in OrderDetail) { if (Row.Index < count) { // Row.SetParentRow(CurrentOrder); ItemRows[Row.Index] = Row; } else { Row.Delete(); } } } int i = 0; foreach (ListViewItem lvItem in lvCanDiscount.Items) { if (i >= count) { break; // 不應發生,以防萬一 } if (ItemRows[i] == null) { BasicDataSet.OrderItemRow Row = DataSet1.OrderItem.NewOrderItemRow(); SetOrderItemFromListViewItem(Row, lvItem, i); Row.SetParentRow(CurrentOrder); DataSet1.OrderItem.AddOrderItemRow(Row); ItemRows[i] = Row; } else { ItemRows[i].BeginEdit(); SetOrderItemFromListViewItem(ItemRows[i], lvItem, i); // 原始的資料應該己經設了ParentRow ItemRows[i].EndEdit(); } i++; } foreach (ListViewItem lvItem in lvNoDiscount.Items) { if (i >= count) { break; // 不應發生,以防萬一 } if (ItemRows[i] == null) { BasicDataSet.OrderItemRow Row = DataSet1.OrderItem.NewOrderItemRow(); SetOrderItemFromListViewItem(Row, lvItem, i); Row.SetParentRow(CurrentOrder); DataSet1.OrderItem.AddOrderItemRow(Row); ItemRows[i] = Row; } else { ItemRows[i].BeginEdit(); SetOrderItemFromListViewItem(ItemRows[i], lvItem, i); // 原始的資料應該己經設了ParentRow ItemRows[i].EndEdit(); } i++; } OrderDetail = ItemRows; } catch (Exception E) { MessageBox.Show(E.Message + "<OrderItem更新出錯>"); return; } } catch (System.Exception E) { MessageBox.Show(E.Message + " <Order更新出錯>"); return; } try { BasicDataSetTableAdapters.OrderTableAdapter adapter = new BasicDataSetTableAdapters.OrderTableAdapter(); adapter.Connection = MapPath.BasicConnection; adapter.ClearBeforeFill = true; adapter.Update(CurrentOrder); CurrentOrder.AcceptChanges(); } catch (Exception E) { MessageBox.Show(E.Message + "Update(CurrentOrder) 出錯"); return; } try // 必須把TableAdapter偵側并行違規關掉,否則第二次就存不入 { BasicDataSetTableAdapters.OrderItemTableAdapter adapterItem = new BasicDataSetTableAdapters.OrderItemTableAdapter(); adapterItem.ClearBeforeFill = true; adapterItem.Connection = MapPath.BasicConnection; adapterItem.Update(OrderDetail); DataSet1.OrderItem.AcceptChanges(); } catch (Exception E) { MessageBox.Show(E.Message + "Update(OrderItem)出錯"); } }