一、關聯窗體數據更新
關聯窗體數據修改時,如果一個為總體數據顯示窗體A,另一個為詳細修改窗體B,從A進入B,在B中對數據進行修改,然后返回A,這時A窗體的數據需要更新。
我采用最簡單的方法,首先保證每個窗體只有一個(網上代碼很多),每次激活窗體時就重新載入數據,從A進入B的代碼如下:
#region 激活或創建用戶管理層面 bool isExit = false; foreach (Form childFrm in this.MdiParent.MdiChildren) { //用子窗體的Name進行判斷,如果已經存在則將他激活 if (childFrm.Name == "Form_UserManage") { if (childFrm.WindowState == FormWindowState.Minimized) childFrm.WindowState = FormWindowState.Normal; childFrm.Activate(); isExit = true; } } if (isExit == false) { // 如果該窗體不存在則新生成一個庫存查詢窗體 Form_UserManage newFrm = new Form_UserManage(); newFrm.MdiParent = this.MdiParent; newFrm.Show(); } this.Close(); #endregion
也可以讓B成為模式窗體,比較簡單。上面A和B是獨立的兩個窗體,都在同一級菜單下時使用較好。
一、刪除dataGridview中選中的一行或多行
參考博文:http://blog.sina.com.cn/s/blog_8b94db9c01015yim.html
DialogResult RSS = MessageBox.Show(this,"確定要刪除選中行數據碼?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning); switch(RSS) { case DialogResult.Yes: for (int i = this.dataGridView1.SelectedRows.Count; i > 0; i--) { int ID = Convert.ToInt32(dataGridView1.SelectedRows[i - 1].Cells[0].Value); dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[i - 1].Index); //使用獲得的ID刪除數據庫的數據 string SQL = "delete from UserInfo where UserId='"+ID.ToString()+"'"; int s =Convert.ToInt32(cl.Execute(SQL)); //cl是操作類的一個對像,Execute()是類中的一個方法 if (s!=0) { MessageBox.Show("成功刪除選中行數據!"); } } break; case DialogResult.No: break; }
在上面代碼中,需要按照dataGridview中的列下標進行篩選,如果是刪除就進行刪除,否則就不進行刪除。操作時發現下標編號默認是文本框是編號【1,2,3】,行中有button,button編號【1,2,3】,這時按列來確定是否是選擇的內容時就會出錯。后來發現是dataGridview初始化時少了一個屬性:
this.dgv_AllUsers.AutoGenerateColumns = false;
添加上這行代碼后可以按照統一下標操作。郁悶了半天才找到原因。
#region 刪除選中的行 string buttonText = this.dgv_AllUsers.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); //int CIndex = e.ColumnIndex; //按鈕所在列為第五列,列下標從0開始的 if (buttonText == "刪除") { //獲取在同一行第一列的單元格中的字段值 string _UID =this.dgv_AllUsers[0, e.RowIndex].Value.ToString(); string _Uname = this.dgv_AllUsers[1, e.RowIndex].Value.ToString(); //MessageBox.Show(_UID.ToString()); DialogResult RSS = MessageBox.Show(this, "確定要刪除選中行( ID為" + _UID + ":,名稱為:" + _Uname + " )的數據碼?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); switch (RSS) { case DialogResult.Yes: jinlongDLL.DBHelper db = new DBHelper(); string SQL = "delete from users where id='" + _UID + "';"; int s = db.ExecuteSql(SQL); if (s != 0) { MessageBox.Show("成功刪除選中行數據!"); } dgv_AllUsers_Init();//載入用戶數據 break; case DialogResult.No: break; } } #endregion