如何将填在datagridview单元格的内容存入数据库

miodiske 2009-07-27 09:48:25
在datagridview显示的表里面输入数字 怎么在不用任何控件的情况下 将数字即时存入数据库呢(也就是我在打开第二个Form后再回来datagridview所在的Form 这个数字依然存在)??


各位大大帮帮忙咯= = 写上代码哈= =

满分送上=。= ~
...全文
1019 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
aideng 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sandy945 的回复:]
SqlCommandBuilder  注意点:

  1.只能更新一个表,不能更新两个或两个以上相关联的表
  2.表中必须有主键
  3.更新的表中字段不能有image类型的

[/Quote]
我试了一下,表中没有主键也能成功
阿非 2009-07-27
  • 打赏
  • 举报
回复

create table DataGridViewDemoTable
(
[ID] int identity(1,1) primary key,
[Name] varchar(20) unique,
[Department] varchar(20)
)
insert into DataGridViewDemoTable ([Name],[Department]) select '张三','市场部'
union all select '李四','研发部'
union all select '王二','策划部'

select * from DataGridViewDemoTable
阿非 2009-07-27
  • 打赏
  • 举报
回复

namespace InformationTest
{
partial class DataGridViewDemo
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows 窗体设计器生成的代码

/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.dataGridView1 = new System.Windows.Forms.DataGridView();
this.btnSave = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
this.SuspendLayout();
//
// dataGridView1
//
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Location = new System.Drawing.Point(12, 12);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.RowTemplate.Height = 23;
this.dataGridView1.Size = new System.Drawing.Size(366, 150);
this.dataGridView1.TabIndex = 0;
//
// btnSave
//
this.btnSave.Location = new System.Drawing.Point(136, 203);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(75, 23);
this.btnSave.TabIndex = 1;
this.btnSave.Text = "保存";
this.btnSave.UseVisualStyleBackColor = true;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// DataGridViewDemo
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(402, 273);
this.Controls.Add(this.btnSave);
this.Controls.Add(this.dataGridView1);
this.Name = "DataGridViewDemo";
this.Text = "DataGridViewDemo";
this.Load += new System.EventHandler(this.DataGridViewDemo_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.DataGridView dataGridView1;
private System.Windows.Forms.Button btnSave;
}
}
阿非 2009-07-27
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Data.SqlClient;

namespace InformationTest
{
public partial class DataGridViewDemo : Form
{
public DataGridViewDemo()
{
InitializeComponent();
}

private void btnSave_Click(object sender, EventArgs e)
{
DataTable dt = dataGridView1.DataSource as DataTable;
if (dt != null)
{
try
{
using (SqlConnection con = new SqlConnection("server=.;uid=xxx;pwd=xxx;database=test"))
{
SqlDataAdapter da = new SqlDataAdapter("select * from [DataGridViewDemoTable]", con);
SqlCommandBuilder scb = new SqlCommandBuilder(da);
DataSet ds = new DataSet();
da.Fill(ds, "DataGridViewDemoTable");
da.Update(dt);
}
}
catch (DataException de)
{
con = null;
}
}
}

private void DataGridViewDemo_Load(object sender, EventArgs e)
{
using (SqlConnection con = new SqlConnection("server=.;uid=xxx;pwd=xxx;database=test"))
{
try
{
SqlDataAdapter da = new SqlDataAdapter("select * from [DataGridViewDemoTable]", con);
DataSet ds = new DataSet();
da.Fill(ds, "DataGridViewDemoTable");
if (ds.Tables.Contains("DataGridViewDemoTable"))
{
dataGridView1.DataSource = ds.Tables["DataGridViewDemoTable"];
}
}
catch (DataException de)
{
con = null;
}
}
}
}
}
miodiske 2009-07-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chenshuaijunsfsf 的回复:]
OleDbDataAdapter teacherAdapter= new OleDbDataAdapter("SELECT * FROM Teacher",myConn); OleDbCommandBuilder teacherBuilder=new OleDbCommandBuilder(teacherAdapter);
[/Quote]

其实这个我也有一份代码 可是不知道放在那个事件上。。放在CellEndEdit上又没效果

6楼的jasondct大大= = 给份代码参考下嘛。。
jasondct 2009-07-27
  • 打赏
  • 举报
回复
直接循环atagridview, 获取单元格的值, 每循环一次,写入数据(需要判断。)
花落_ 2009-07-27
  • 打赏
  • 举报
回复
OleDbDataAdapter teacherAdapter= new OleDbDataAdapter("SELECT * FROM Teacher",myConn); OleDbCommandBuilder teacherBuilder=new OleDbCommandBuilder(teacherAdapter);
l1314j 2009-07-27
  • 打赏
  • 举报
回复
你把要保存的那些数据用全局变量保存起来,那样不管你怎么打开其他Form,只要不修改变量的值,都是不会变化的,然后再把值保存下来。
miodiske 2009-07-27
  • 打赏
  • 举报
回复
这个其实没什么关系的 我设计的这个程序 只要输入的数据不出差错 基本上一个单元格重复填写的次数并不会太多

保存的按钮是一定会有的 但是我希望在一次程序的运行之中使用到这个单元格的内容 。。。

这里我题目的意思弄错了=。= 现在才发现。。 修改一下。。

在一次程序的运行之中 这个单元格的数字不因为打开其他的Form而改变或者消失 但是在点击保存的Button后 存入数据库

再帮帮忙噜。。
十八道胡同 2009-07-27
  • 打赏
  • 举报
回复
可以在单元格编辑结束后就写入数据库,但是貌似这样子效率不是很好哦。
阿非 2009-07-27
  • 打赏
  • 举报
回复
不要这么设计程序~ 虽说可以实现,但是 是错误的设计

用户可能会多次修改所填写的数据,或填写多个, 这个设计会导致频繁操作数据库的
应该是 有一个保存 或确认的按钮 来 存储数据
surlew 2009-07-27
  • 打赏
  • 举报
回复
如果说达到楼主的目的可以在在CellEndEdit事件里面写保存到数据库的操作,

但是这样即时保存效率不好吧!
阿非 2009-07-27
  • 打赏
  • 举报
回复
要下班了,和你说下 主要思路
你可以在窗体关闭前 将绑定给datagridview 的数据源 保存起来

这样 在切换回来的时候 先判断 用于保存 的变量是否有值如果有 将变量绑定给 datagridview 否则 则重新查询绑定



public static DataTable stDT;

private void DataGridViewDemo_FormClosing(object sender, FormClosingEventArgs e)
{
stDT = dataGridView1.DataSource as DataTable;
}

sephirothy 2009-07-27
  • 打赏
  • 举报
回复

private void toolStripButton4_Click(object sender, EventArgs e)
{

string sql = "server=(local);user id=sa;pwd=sa;database=test";
SqlConnection con = new SqlConnection(sql);
con.Open();
SqlCommand cmd = new SqlCommand("", con);

for (int i = 0; i < dataGridView2.RowCount - 1; i++)
{

cmd.CommandText = "insert into jilu values(@niuju,@zhuansu,@zhougonglv,@shurugonglv,@shuchugonglv,@gonglvyinshu,@bengzhanzaoyin,@caozuotaizaoyin,@madazaoyin,@madayouya,@shuibengyali,@tuijinyali,@madajinyou,@madahuiyou,@lengqueshui,@geijinli,@maoguli1,@maoguli2,@youye,@youbeng,@mada,@daqiwendu,@daqishidu,@xingcheng,@sudu,@zhengjixiaolv,@shijian)";
cmd.Parameters.Clear();
cmd.Parameters.Add("@niuju", SqlDbType.Char, 10);
cmd.Parameters.Add("@zhuansu", SqlDbType.Char, 10);
cmd.Parameters.Add("@zhougonglv", SqlDbType.Char, 10);
cmd.Parameters.Add("@shurugonglv", SqlDbType.Char, 10);
cmd.Parameters.Add("@shuchugonglv", SqlDbType.Char, 10);
cmd.Parameters.Add("@gonglvyinshu", SqlDbType.Char, 10);
cmd.Parameters.Add("@bengzhanzaoyin", SqlDbType.Char, 10);
cmd.Parameters.Add("@caozuotaizaoyin", SqlDbType.Char, 10);
cmd.Parameters.Add("@madazaoyin", SqlDbType.Char, 10);
cmd.Parameters.Add("@madayouya", SqlDbType.Char, 10);
cmd.Parameters.Add("@shuibengyali", SqlDbType.Char, 10);
cmd.Parameters.Add("@tuijinyali", SqlDbType.Char, 10);
cmd.Parameters.Add("@madajinyou", SqlDbType.Char, 10);
cmd.Parameters.Add("@madahuiyou", SqlDbType.Char, 10);
cmd.Parameters.Add("@lengqueshui", SqlDbType.Char, 10);
cmd.Parameters.Add("@geijinli", SqlDbType.Char, 10);
cmd.Parameters.Add("@maoguli1", SqlDbType.Char, 10);
cmd.Parameters.Add("@maoguli2", SqlDbType.Char, 10);
cmd.Parameters.Add("@youye", SqlDbType.Char, 10);
cmd.Parameters.Add("@youbeng", SqlDbType.Char, 10);
cmd.Parameters.Add("@mada", SqlDbType.Char, 10);
cmd.Parameters.Add("@daqiwendu", SqlDbType.Char, 10);
cmd.Parameters.Add("@daqishidu", SqlDbType.Char, 10);
cmd.Parameters.Add("@xingcheng", SqlDbType.Char, 10);
cmd.Parameters.Add("@sudu", SqlDbType.Char, 10);
cmd.Parameters.Add("@zhengjixiaolv", SqlDbType.Char, 10);
cmd.Parameters.Add("@shijian", SqlDbType.DateTime, 20);



cmd.Parameters[0].Value = dataGridView2.Rows[i].Cells[2].Value.ToString();
cmd.Parameters[1].Value = dataGridView2.Rows[i].Cells[3].Value.ToString();
cmd.Parameters[2].Value = dataGridView2.Rows[i].Cells[4].Value.ToString();
cmd.Parameters[3].Value = dataGridView2.Rows[i].Cells[5].Value.ToString();
cmd.Parameters[4].Value = dataGridView2.Rows[i].Cells[6].Value.ToString();
cmd.Parameters[5].Value = dataGridView2.Rows[i].Cells[7].Value.ToString();
cmd.Parameters[6].Value = dataGridView2.Rows[i].Cells[8].Value.ToString();
cmd.Parameters[7].Value = dataGridView2.Rows[i].Cells[9].Value.ToString();
cmd.Parameters[8].Value = dataGridView2.Rows[i].Cells[10].Value.ToString();
cmd.Parameters[9].Value = dataGridView2.Rows[i].Cells[11].Value.ToString();
cmd.Parameters[10].Value = dataGridView2.Rows[i].Cells[12].Value.ToString();
cmd.Parameters[11].Value = dataGridView2.Rows[i].Cells[13].Value.ToString();
cmd.Parameters[12].Value = dataGridView2.Rows[i].Cells[14].Value.ToString();
cmd.Parameters[13].Value = dataGridView2.Rows[i].Cells[15].Value.ToString();
cmd.Parameters[14].Value = dataGridView2.Rows[i].Cells[16].Value.ToString();
cmd.Parameters[15].Value = dataGridView2.Rows[i].Cells[17].Value.ToString();
cmd.Parameters[16].Value = dataGridView2.Rows[i].Cells[18].Value.ToString();
cmd.Parameters[17].Value = dataGridView2.Rows[i].Cells[19].Value.ToString();
cmd.Parameters[18].Value = dataGridView2.Rows[i].Cells[20].Value.ToString();
cmd.Parameters[19].Value = dataGridView2.Rows[i].Cells[21].Value.ToString();
cmd.Parameters[20].Value = dataGridView2.Rows[i].Cells[22].Value.ToString();
cmd.Parameters[21].Value = dataGridView2.Rows[i].Cells[23].Value.ToString();
cmd.Parameters[22].Value = dataGridView2.Rows[i].Cells[24].Value.ToString();
cmd.Parameters[23].Value = dataGridView2.Rows[i].Cells[25].Value.ToString();
cmd.Parameters[24].Value = dataGridView2.Rows[i].Cells[26].Value.ToString();
cmd.Parameters[25].Value = dataGridView2.Rows[i].Cells[27].Value.ToString();
cmd.Parameters[26].Value = textBox27.Text;
cmd.ExecuteNonQuery();



}
con.Close();
MessageBox.Show("保存成功");

}

希望对你有用。
miodiske 2009-07-27
  • 打赏
  • 举报
回复
恩恩恩恩。。对的。
阿非 2009-07-27
  • 打赏
  • 举报
回复
不是和你说了,放在那里是不好的

我明白你的需求了,你是想 在form 之间切换的时候 数据的状态是保持的, 但不存入数据库
如果用户点击按钮之后 存入数据库

这样?

阿非 2009-07-27
  • 打赏
  • 举报
回复
。。。
miodiske 2009-07-27
  • 打赏
  • 举报
回复
我把BUTTON的代码放到了CellEndEdit 事件里面了=。=。。
阿非 2009-07-27
  • 打赏
  • 举报
回复
你是点按钮保存的么?
miodiske 2009-07-27
  • 打赏
  • 举报
回复
还是没用哦。。 Load是执行了。。可是还是没用。。
加载更多回复(4)

110,579

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧