winform代碼:關聯窗體數據更新,刪除dataGridview中選中的一行或多行


一、關聯窗體數據更新

關聯窗體數據修改時,如果一個為總體數據顯示窗體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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM