峰峦@叠嶂 2023-04-21 15:32 采纳率: 99%
浏览 23
已结题

想对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] <= '"</span> + dateTimePicker2.Value.<span class="hljs-constructor">ToString(<span class="hljs-string">"yyyy-MM-dd HH:mm:ss"</span>)</span> + <span class="hljs-string">"' 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;//修改内容后变为蓝色 
        }

```

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-21 18:39
    关注
    • 你可以看下这个问题的回答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中内容保存相关的代码和错误信息,无法判断问题出在哪里。请提供更多详细信息或者错误信息,以便我能够更好地解答。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 创建了问题 4月21日

悬赏问题

  • ¥30 matlab appdesigner私有函数嵌套整合
  • ¥15 给我一个openharmony跑通webrtc实现视频会议的简单demo项目,sdk为12
  • ¥15 vb6.0使用jmail接收smtp邮件并另存附件到D盘
  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题