当前位置:首页 > 技能相关 > C#与C++ > 正文内容

C# DataGridView控件更新数据的方式

admin2年前 (2023-03-08)C#与C++6200 修订时间:2023-03-08 17:53:58

WinFrom程序绑定了一个DataGridView控件,我需要添加一个button按钮来更改状态,还需要把更新之后的状态更新到数据库,如下图所示的这样:

image.png

1、按钮根据不同条件有不同的展示:

image.png

代码:

//dataGridView第2列隐藏
dataGridView1.Columns[1].Visible = false;

2、按钮区域是通过视图界面编辑的,也可在程序加载时动态添加:

image.png

引用:C# DataGridView控件使用方法

3、数据窗口绑定数据

采用独立的方法searh()去根据条件获取数据并绑定,其中 dataGridView1.DataSource = dt_doctor; 是将datatable对象绑定到dataGridView控件;

        private void Searh()
        {
            string sql;
            if (checkBox1.Checked)
            {
                sql = "select MR_NAME,SERIAL_NO,MR_CODE,DATA_MODEL_CODE from cpr.mr_item_index  where DATA_MODEL_CODE = '" + comboBox1.Text + "F' and DEPT_CODE = '*' order by SERIAL_NO asc";
                dataGridView1.Columns[1].Visible = false;
                dataGridView1.Columns[2].Visible = true;
            }
            else
            {
                sql = "select MR_NAME,SERIAL_NO,MR_CODE,DATA_MODEL_CODE from cpr.mr_item_index  where DATA_MODEL_CODE = '" + comboBox1.Text + "' and DEPT_CODE = '*' order by SERIAL_NO asc";
                dataGridView1.Columns[2].Visible = false;
                dataGridView1.Columns[1].Visible = true;
            }

            DataTable dt_doctor = conn.GetDataSet(sql).Tables[0];
            dataGridView1.DataSource = dt_doctor;
            dataGridView1.Columns[3].HeaderText = "模板名称";
            dataGridView1.Columns[4].HeaderText = "排序编号";
            dataGridView1.Columns[5].HeaderText = "模板编码";
            dataGridView1.Columns[6].HeaderText = "病历子集编码";
            //根据单元格内容自动跳帧宽度
            dataGridView1.AutoResizeColumns();

            dataGridView1.Columns[6].ReadOnly = true;
            dataGridView1.Columns[5].ReadOnly = true;
            dataGridView1.Columns[0].Width = 50;
            dataGridView1.Columns[1].Width = 50;
            dataGridView1.Columns[2].Width = 50;
        }

4、更新一条数据做法

双击datagridview控件,修改其点击事件代码:

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //点击的行索引大于等于0,则执行接下来的语句,这里排除点击了边框区域的BUG问题
            //e.RowIndex 行索引号
            if (e.RowIndex >= 0)
            {
                //根据列索引获取点击的单元元素 e.ColumnIndex
                DataGridViewColumn column = dataGridView1.Columns[e.ColumnIndex];

                switch (e.ColumnIndex)
                {
                    case 0:
                        //判断列是否为DataGridViewButtonColumn
                        if (column is DataGridViewButtonColumn)
                        {
                            //根据行索引获取行数据集合
                            DataGridViewRow Rows = dataGridView1.Rows[e.RowIndex];
                            //组合更新语句,Rows.Cells[2].Value 当前行第三列数据
                            //在将数据转换为INT类型前,需要先把Object对象转换为string
                            //Rows.Cells[3].Value.ToString()
                            string sql = "update cpr.mr_item_index set MR_NAME = '" + Rows.Cells[3].Value + "',SERIAL_NO = " + Int32.Parse(Rows.Cells[4].Value.ToString()) + " where MR_CODE = '" + Rows.Cells[5].Value + "'";
                            if (conn.ExecSQLresult(sql) > 0)
                            {
                                Searh();
                            }
                        }
                        break;
                    case 1:
                        //判断列是否为DataGridViewButtonColumn
                        if (column is DataGridViewButtonColumn)
                        {
                            //根据行索引获取行数据集合
                            DataGridViewRow Rows = dataGridView1.Rows[e.RowIndex];
                            string sql = "update cpr.mr_item_index set DATA_MODEL_CODE = '" + Rows.Cells[6].Value + "F'  where MR_CODE = '" + Rows.Cells[5].Value + "'";
                            if (conn.ExecSQLresult(sql) > 0)
                            {
                                Searh();
                            }
                        }
                        break;
                    case 2:
                        //判断列是否为DataGridViewButtonColumn
                        if (column is DataGridViewButtonColumn)
                        {
                            //根据行索引获取行数据集合
                            DataGridViewRow Rows = dataGridView1.Rows[e.RowIndex];
                            string str = Rows.Cells[6].Value.ToString().Substring(0, Rows.Cells[6].Value.ToString().Length - 1);
                            string sql = "update cpr.mr_item_index set DATA_MODEL_CODE = '" + str + "' where MR_CODE = '" + Rows.Cells[5].Value + "'";
                            if (conn.ExecSQLresult(sql) > 0)
                            {
                                Searh();
                            }
                        }
                        break;
                    default:
                     break;
                }
            }
        }

以上代码根据点击的哪一行哪一列的按钮进行判断,执行不同的按钮功能;

5、批量更新修改数据

采用Update_All()方法批量更新修改的数据(该方法会从0到全部的更新数据);

        private void Update_All()
        {
            if (dataGridView1.Rows.Count > 0)
            {
                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    DataGridViewRow Rows = dataGridView1.Rows[i];
                    string sql = "update cpr.mr_item_index set MR_NAME = '" + Rows.Cells[3].Value + "',SERIAL_NO = " + Int32.Parse(Rows.Cells[4].Value.ToString()) + " where MR_CODE = '" + Rows.Cells[5].Value + "'";
                    conn.ExecSQLresult(sql);
                }
                MessageBox.Show("数据批量更新完毕!!!", "提示");
                Searh();
            }
            else {
                MessageBox.Show("没有数据需要更新!!!", "警告");
            }
        }

6、模糊搜索定位数据

首先我们得创建点击按钮,判断是否有选中的行数据,没有选中行从第一个数据检索,有则从选中数据第一个行索引开始检索;

            int ii = 0;
            if (this.dataGridView1.SelectedRows.Count>0)
            {
                for (int i = 0; i < this.dataGridView1.SelectedRows.Count; i++)//遍历所有选中的行 
                {
                    ii = this.dataGridView1.SelectedRows[i].Index;
                }
                Searh_name(ii);
            }
            else
            {
                Searh_name(1);

            }

检索方法如下:

这行语句

Rows.Cells[3].Value.ToString().Contains(textBox1.Text.Trim())

表示指定单元格数据是否包含某个子字符串

        private void Searh_name(int start_i)
        {

            if (dataGridView1.Rows.Count > 0)
            {
                dataGridView1.Rows[start_i].Selected = false;
                for (int i = start_i+1; i < dataGridView1.Rows.Count; i++)
                {
                    DataGridViewRow Rows = dataGridView1.Rows[i];

                    if (Rows.Cells[3].Value.ToString().Contains(textBox1.Text.Trim()))
                    {
                        dataGridView1.Rows[i].Selected = true;
                        this.dataGridView1.CurrentCell = this.dataGridView1.Rows[i].Cells[0];
                        return;
                    }

                }
            }
            else
            {
                MessageBox.Show("没有数据检索!!!", "警告");
            }
        }

范例代码:outpEMRasc 门诊病历排序隐藏工具(源码).zip

 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=296

分享给朋友:

相关文章

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。