想对datagridview,所查询内容修改保存;

从网上摘了一段代码,想实现,窗体表格datagridview的数据,修改时为蓝色,保存后为白色,但执行起来,保存时总保存不住数据,代码如下,请问大家给看看哪里不对呢,谢谢;


```c#
 这段是原来就有的代码,正常执行,没问题,是查询按钮
private void button1_Click(object sender, EventArgs e)
        {
            //连接数据库
            conn = new SqlConnection("server=localhost;database=Whyy;user=sa;password=whyy@2021");

            conn.Open();

            //查询条件      

            SqlString = "select * from w_Qctable1 where productname like '%" + textBox3.Text + "%' and batchNo like '%" + textBox1.Text + "%'  and [date] >= '" + dateTimePicker1.Value.ToString("yyyy-MM-dd HH:mm:ss") + "'and [date] <= '" + dateTimePicker2.Value.ToString("yyyy-MM-dd HH:mm:ss") + "' order by date asc ";

            //加载数据并显示

            try
            {
                //查询条件和SqlConnection连接
                SqlCommand cmd = new SqlCommand(SqlString, conn);
                //数据适配器
                SqlDataAdapter sda = new SqlDataAdapter();
                sda.SelectCommand = cmd;
                //DataTable存储数据
                DataTable dset = new DataTable();
                sda.Fill(dset);
                dataGridView1.DataSource = dset;

            }
            catch
            { }
            finally
            {
                conn.Close();
            }

以下为摘抄的代码,是用于保存datagridview修改的内容,但执行起来,总保存不住修改的内容;

        private DataTable dset = new DataTable();
        private SqlDataAdapter sda = new SqlDataAdapter();
        private Boolean isUpdate = false;    
private void 保存按钮_Click(object sender, EventArgs e)
        {
            if (isUpdate)
            {
                try
                {
                    SqlCommand cmd = new SqlCommand(SqlString, conn); 
                    SqlCommandBuilder SCB = new SqlCommandBuilder(sda);
                    sda.SelectCommand = cmd;
                    DataTable dset = new DataTable();
                    sda.Fill(dset);
                    dataGridView1.DataSource = dset;
                    
                   sda.Update(dset);

                    isUpdate = false;

                    //SqlCommand cmd = new SqlCommand(SqlString, conn);
                    ////数据适配器
                    //SqlDataAdapter sda = new SqlDataAdapter();
                    //sda.SelectCommand = cmd;
                    ////DataTable存储数据
                    //DataTable dt = new DataTable();
                    //sda.Fill(dt);
                    //dataGridView1.DataSource = dt;
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    return;
                }
                MessageBox.Show("更新成功! ");
            }
            else
            {
                MessageBox.Show("没有更新内容! ");
            }
            for (int i = 0; i < dset.Rows.Count; i++)
                for (int j = 0; j < dset.Columns.Count; j++)
                {
                    dataGridView1[j, i].Style.BackColor = Color.White;//保存后变回白色
                }

        }

   private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            isUpdate = true;
            dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.Blue;//修改内容后变为蓝色 
        }

```

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/176199
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:datagridview实现批量插入与更新
  • 除此之外, 这篇博客: DataGridView直接修改数据并返回数据库中的 DataGridView直接修改数据并返回数据库 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;//引入命名空间

    namespace _15._7DataGridView直接修改数据并返回数据库
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
    private SqlConnection GetSqlConnection()//连接数据库方法
    {
    String constr = “server=.;user=sa;pwd=sa;database=company”;
    SqlConnection con = new SqlConnection(constr);
    return con;
    }
    private void BindGridView2(DataGridView dgv)//绑定数据库,本人水平
    {
    string selestr = “select * from clerk”;//sql查询语句
    SqlConnection con = GetSqlConnection();//水箱连接管
    con.Open();//打开阀门
    DataSet da = new DataSet();//设天面消防水箱
    SqlDataAdapter dapter = new SqlDataAdapter(selestr, con);//设抽水泵
    dapter.Fill(da);//开泵,抽上天面消防水箱
    //dgv = new DataGridView();错误代码
    dgv.DataSource = da.Tables[0];//DataGridView1数据源=da.Tables[0]
    }
    private void BindGridView()//绑定数据库
    {
    string selestr = “select * from clerk”;//sql查询语句
    SqlConnection con = GetSqlConnection();//建立连接
    try
    {
    con.Open();//打开数据库
    SqlDataAdapter dapter = new SqlDataAdapter(selestr, con);//设抽水泵
    DataTable table = new DataTable();//设天面消防水箱
    dapter.Fill(table);//开泵
    this.dataGridView1.AutoGenerateColumns = true;//自动创建列
    this.dataGridView1.DataSource = table;//数据源=table
    this.dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;//单击可以编辑。
    }
    catch (Exception ex)
    { MessageBox.Show(ex.Message);}
    finally
    {
    con.Close();
    }
    }
    private void Form1_Load(object sender, EventArgs e)
    {
    BindGridView();
    // BindGridView2(dataGridView1);
    }
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)//更改当前单元格时,返回数据库,事件
    {
    SqlConnection con = GetSqlConnection();
    try
    {
    con.Open();
    int myint = dataGridView1.CurrentCell.ColumnIndex;//当前列索引
    int myint2 = dataGridView1.CurrentCell.RowIndex;//当前行索引
    string str1 = dataGridView1.Columns[ myint].HeaderText + “=” +"’"+ dataGridView1.CurrentCell.Value.ToString()+"’";//列名+当前格内容
    string str2=dataGridView1.Rows[myint2].Cells[0].Value.ToString();//当前行,0列内容。
    string updatestr = "update clerk set " +str1+“where id=” +str2;//sql更改语句
    SqlCommand mycomd = new SqlCommand(updatestr, con);//注入命令
    mycomd.ExecuteNonQuery();//执行命令
    BindGridView(); //更新显示. 先修改数据库,再绑定显示。
    }
    catch (Exception ex)
    { MessageBox.Show(ex.Message); }
    finally
    {
    con.Close();
    }

        }
    }
    

    }
    下面是运行效果:
    在这里插入图片描述
    数据库如下:
    在这里插入图片描述

  • 您还可以看一下 王小科老师的零基础学C#编程—C#从小白到大咖课程中的 DataGridView控件的使用小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    很抱歉,我无法回答该问题,因为题目描述中没有给出和DataGridView中内容保存相关的代码和错误信息,无法判断问题出在哪里。请提供更多详细信息或者错误信息,以便我能够更好地解答。

使用SQL的update语句修改数据