1. 程式人生 > >將dataGridView中的新增/刪除等修改儲存至資料庫 ,支援多條操作,最後一次性儲存

將dataGridView中的新增/刪除等修改儲存至資料庫 ,支援多條操作,最後一次性儲存

1、窗體級變數,準備工作

        MMS.Public.DbAccLibry.DbAccess myDbacc;

        //// <summary>
        /// 批量修改資料庫交易物件
        /// </summary>
        private SqlDataAdapter myDAMult = new SqlDataAdapter();

        /// <summary>
        /// 批量修改記錄集
        /// </summary>
        private DataSet myDsMult = new DataSet();
        /// <summary>
        /// 批量修改引數
        /// </summary>
        private SqlParameter myParmMult = new SqlParameter();

        /// <summary>
        /// 資料庫連線交易物件
        /// </summary>
        private SqlConnection myConn;

        /// <summary>
        /// SQL構造物件
        /// </summary>
        ///private SqlCommandBuilder myMultCB; 如果沒指定COMMAND,則需要,否則不需要,本DEMO不需要

2、載入填充

        /// <summary>
        /// 載入填充
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void myComBoxClient_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            myDAMult = new SqlDataAdapter(" select ta.GoodID as 商品編碼, tb.Defscancode as 商品條碼,tb.GoodName as 商品名稱,tb.Unit as 單位,tb.spec as 規格,ta.Clientid as 客戶編號,ta.SupplyPric as 供應價格,ta.UserID as  系統操作員,ta.RepDate as 報價日期,tb.RetailPric as 零售價格,tb.WholeSalePric as 批發價格,tb.MemPric as 會員價格 from Bill_GoodRepPricInfo ta,jcv_GoodBaseInfo tb where ta.GoodID=tb.GoodID and   ta.clientid= @v_clientid   ", myConn);

            myDAMult.SelectCommand.Parameters.Add("@v_clientid", SqlDbType.VarChar, 80).Value =myComBoxClient.GetSelectID() ;

            if (myDsMult != null && myDsMult.Tables.Count != 0 && myDsMult.Tables[0].Rows.Count > 0)
            {
                myDsMult.Tables.Clear();
            }
            myDAMult.Fill( myDsMult);

            bdsGoodRepPric.DataSource = myDsMult.Tables[0];

            myGridView1.SetMyGridViewDataSource(bdsGoodRepPric);
        }


3、  在GridView裡直接輸入商品編碼檢索資訊

         /// <summary>
        /// 在GridView裡直接輸入商品編碼檢索資訊
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void myGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (myGridView1.Columns[e.ColumnIndex].HeaderText.Trim() == "商品編碼")
            {
                DataTable dtGoodBse = new DataTable();

                myDAMult = new SqlDataAdapter("select ScanCode,GoodName,Unit,Spec,RetailPric,WholeSalePric,MemPric from jcv_GoodBase where GoodID='" + myGridView1.CurrentCell.Value.ToString().Trim() + "'", myConn);
                myDAMult.Fill(dtGoodBse);

                if ((dtGoodBse == null) || (dtGoodBse.Rows.Count == 0))
                {
                    MessageBox.Show("沒有該條件的商品資料", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    myGridView1.CurrentCell.Selected = true;
                    return;
                }
                else
                {
                    myGridView1.Rows[e.RowIndex].Cells["商品條碼"].Value = dtGoodBse.Rows[0]["ScanCode"];
                    myGridView1.Rows[e.RowIndex].Cells["商品名稱"].Value = dtGoodBse.Rows[0]["GoodName"];
                    myGridView1.Rows[e.RowIndex].Cells["單位"].Value = dtGoodBse.Rows[0]["Unit"];
                    myGridView1.Rows[e.RowIndex].Cells["規格"].Value = dtGoodBse.Rows[0]["Spec"];
                    myGridView1.Rows[e.RowIndex].Cells["零售價格"].Value = dtGoodBse.Rows[0]["RetailPric"];
                    myGridView1.Rows[e.RowIndex].Cells["批發價格"].Value = dtGoodBse.Rows[0]["WholeSalePric"];
                    myGridView1.Rows[e.RowIndex].Cells["會員價格"].Value = dtGoodBse.Rows[0]["MemPric"];
                    myGridView1.Rows[e.RowIndex].Cells["客戶編號"].Value = myComBoxClient.GetSelectID() ;
                    myGridView1.Rows[e.RowIndex].Cells["系統操作員"].Value =MMS.Public.Common.SysCurOperInfo.SysOperID  ;
                    myGridView1.Rows[e.RowIndex].Cells["報價日期"].Value = MMS.Public.Common.SysCurOperInfo.mySysPubFun.GetSysDateTime(MMS.Public.Common.DateTimePart.Day  )  ; 
                }
            }
        }

4、刪除

 /// <summary>
        /// 刪除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override void tsButtonDelete_Click(object sender, EventArgs e)
        {
            if (this.myGridView1.DataSource !=null  && this.myGridView1.Rows.Count > 0 && this.myGridView1.CurrentCell.RowIndex>= 0)
            {
                myGridView1.Rows.RemoveAt(myGridView1.CurrentCell.RowIndex);          
            }
        }

5、一次性儲存所作修改

        /// <summary>
        /// 儲存
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override void tsButtonSave_ButtonClick(object sender, EventArgs e)
        {
            //myMultCB = new SqlCommandBuilder (myDAMult );

            //edit
            myDAMult.UpdateCommand = new SqlCommand("update Bill_GoodRepPricInfo set [email protected]_supplyPric where  [email protected]_GoodID and  [email protected]_ClientID", myConn);

            myParmMult = myDAMult.UpdateCommand.Parameters.Add("@v_GoodID", SqlDbType.VarChar, 50, "商品編碼");
            myParmMult.SourceVersion = DataRowVersion.Original;

            myParmMult = myDAMult.UpdateCommand.Parameters.Add("@v_ClientID", SqlDbType.VarChar, 50, "客戶編號");
            myParmMult.SourceVersion = DataRowVersion.Original;

            myParmMult = myDAMult.UpdateCommand.Parameters.Add("@v_supplyPric", SqlDbType.Decimal, 50, "供應價格");
            myParmMult.SourceVersion = DataRowVersion.Current;

            myDAMult.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;//不能少

            myDAMult.UpdateBatchSize = 10;

            //insert
            myDAMult.InsertCommand = new SqlCommand(" insert into Bill_GoodRepPricInfo(ClientID,GoodID,SupplyPric,UserID,RepDate) values(@v_ClientID,@v_GoodID,@v_SupplyPric,@v_UserID,@v_RepDate)", myConn);

            myParmMult = myDAMult.InsertCommand.Parameters.Add("@v_supplyPric", SqlDbType.Decimal, 50, "供應價格");
            myParmMult.SourceVersion = DataRowVersion.Current;

            myParmMult = myDAMult.InsertCommand.Parameters.Add("@v_GoodID", SqlDbType.VarChar, 50, "商品編碼");
            myParmMult.SourceVersion = DataRowVersion.Current;

            myParmMult = myDAMult.InsertCommand.Parameters.Add("@v_ClientID", SqlDbType.VarChar, 50, "客戶編號");
            myParmMult.SourceVersion = DataRowVersion.Current;

            myParmMult = myDAMult.InsertCommand.Parameters.Add("@v_UserID", SqlDbType.VarChar, 50, "系統操作員");
            myParmMult.SourceVersion = DataRowVersion.Current;

            myParmMult = myDAMult.InsertCommand.Parameters.Add("@v_RepDate", SqlDbType.VarChar, 50, "報價日期");
            myParmMult.SourceVersion = DataRowVersion.Current;

            myDAMult.InsertCommand.UpdatedRowSource = UpdateRowSource.None; //不能少

            myDAMult.DeleteCommand = new SqlCommand("delete from Bill_GoodRepPricInfo where [email protected]_ClientID and  [email protected]_GoodID ", myConn);

            myParmMult = myDAMult.DeleteCommand.Parameters.Add("@v_GoodID", SqlDbType.Int, 10, "商品編碼");
            myParmMult.SourceVersion = DataRowVersion.Original;

            myParmMult = myDAMult.DeleteCommand.Parameters.Add("@v_ClientID", SqlDbType.Int, 10, "客戶編號");
            myParmMult.SourceVersion = DataRowVersion.Original;

            myDAMult.DeleteCommand.UpdatedRowSource = UpdateRowSource.None; //不能少
          
            myGridView1.Update(); 
            myDsMult.Tables.Clear();
            myDsMult.Tables.Add((DataTable)myGridView1.DataSource);

            if (myDsMult.HasChanges())
            {
                myDAMult.Update(myDsMult.Tables[0]);
                myDsMult.AcceptChanges();
            }
            myGridView1.EndEdit();
            foreach (DataGridViewColumn c in myGridView1.Columns)
            {
                c.ReadOnly = true;
            }
           
            base.tsButtonSave_ButtonClick(sender, e);
        }