private void IngredientBindingNavigatorSaveItem_Click(object sender, EventArgs e) { // VEDataSet.IngredientDataTable table = MyFunction.SaveCheck<VEDataSet.IngredientDataTable>(this, IngredientBindingSource, vEDataSet.Ingredient); if (!this.Validate()) { MessageBox.Show("有資料錯誤, 請改好再存!"); return; } IngredientBindingSource.EndEdit(); // 執行此行時,若無問題 RowState.Detached => RowState.Added var table = (MyIngredientTable)m_DataSet.Ingredient.GetChanges(); if (table == null) { MessageBox.Show("沒有改動任何資料! 不用存"); return; } if (table == null) { return; } MyFunction.SetGlobalFlag(GlobalFlag.basicDataModified); foreach (var r in table) { if (r.RowState != DataRowState.Deleted) { r.BeginEdit(); //if (r.IsTitleCodeNull()) r.TitleCode = ""; //if (r.IsVendorIDNull()) r.VendorID = 0; //if (r.IsCanPurchaseNull()) r.CanPurchase = true; //if (r.IsClassNull()) r.Class = 0; //if (r.IsCodeNull()) r.Code = 0; //if (r.IsMinOrderNull()) r.MinOrder = ""; //if (r.IsNameNull()) r.Name = ""; //if (r.IsPriceNull()) r.Price = 0; //if (r.IsSpecsNull()) r.Specs = ""; //if (r.IsUnitNull()) r.Unit = ""; //if (r.IsUnitWeightNull()) r.UnitWeight = 0; r.LastUpdated = DateTime.Now; r.EndEdit(); } } try { m_DataSet.Ingredient.Merge(table); this.IngredientAdapter.Update(m_DataSet.Ingredient); m_DataSet.Ingredient.AcceptChanges(); } catch (Exception ex) { MessageBox.Show("錯誤原因:" + ex.Message + "\r\n存檔發生錯誤,請關閉程式,重新登入!"); } }
private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e) { // MyFunction.AddNewItem(dgvIngredient, "columnIngredientID","IngredientID", vEDataSet.Ingredient); IngredientBindingSource.AddNew(); int max = (from ro in m_DataSet.Ingredient select ro.IngredientID).Max(); int ingredientID = MyFunction.SetCellMaxNo("columnIngredientID", dgvIngredient, max); // 因為供應商資料沒有ValueMember啟始值,只Binding了SelectedValue // 所以後來 BindingSource.EndEdit時,無法成功==> RowState還是Detached,永遠無法改 // 測試方案1:硬上,自己加. EditBakeryProduct.cs的處理方式比較文明, 每個Field都在螢幕上填值 //DataRowView rowView = (DataRowView)IngredientBindingSource.Current; //VEDataSet.IngredientRow row = (VEDataSet.IngredientRow)rowView.Row; //if (row.RowState == DataRowState.Detached) // vEDataSet.Ingredient.Rows.Add(row); DataRowView rowView = (DataRowView)IngredientBindingSource.Current; var row = (MyIngredientRow)rowView.Row; row.CanPurchase = true; }
private void DeletetoolStripButton_Click(object sender, EventArgs e) { if (!this.Validate()) { MessageBox.Show("有資料錯誤, 請改好再作刪除操作!"); return; } this.IngredientBindingSource.EndEdit(); string str = this.IngredientIDTextBox.Text.Trim(); int ingredientID = 0; string name; try { ingredientID = Convert.ToInt32(str); name = nameTextBox.Text.Trim(); } catch { MessageBox.Show("要刪除的食材內碼必需是數字!"); return; } string strCodeName = "食材 <" + ingredientID.ToString() + ">" + name; if (MessageBox.Show("能刪除的食材必需是本年度從來沒有進過貨的\r\n按'確定', 開始載入並檢查全年度進貨單!", "刪除" + strCodeName, MessageBoxButtons.OKCancel) != DialogResult.OK) { return; } if (!m_VoucherDetailLoaded) { try { VoucherAdapter.Fill(m_DataSet.Voucher); VoucherDetailAdapter.Fill(m_DataSet.VoucherDetail); } catch (Exception ex) { MessageBox.Show("載入客人進貨細項時,資料庫發生錯誤:" + ex.Message); return; } m_VoucherDetailLoaded = true; } foreach (var row in m_DataSet.VoucherDetail) { if (row.IsIngredientIDNull()) { continue; } if (row.IngredientID == ingredientID) { var voucher = row.VoucherRow; MessageBox.Show("進貨單" + voucher.ID.ToString() + " 己經進過" + strCodeName + " 無法刪除"); return; } } if (MessageBox.Show(strCodeName + " 本年度沒有進過此貨,可以被刪除\r\n按'確定' 刪除", strCodeName, MessageBoxButtons.OKCancel) == DialogResult.OK) { try { IngredientBindingSource.RemoveCurrent(); IngredientAdapter.Update(m_DataSet.Ingredient); } catch (Exception ex) { MessageBox.Show("刪除" + strCodeName + "及存檔過程錯誤:" + ex.Message); return; } MessageBox.Show("己刪除" + strCodeName + " 並存檔成功!"); return; } MessageBox.Show("沒有刪除 " + strCodeName); }