dataGridView 与 textBox绑定同数据源,dataGridView修改可以更新到数据库中,而textBox修改无法更新到数据库中??
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace genersoft.xmgl
{
public partial class xm_main : Form
{
//定义公共变量
mydata nData = new mydata();
public static SqlDataAdapter sda = new SqlDataAdapter();
public static DataSet ds = new DataSet();
public static string myStyle = "";
//初始控件
public void initial()
{
xmDG.ReadOnly = true;
xmDG.AllowUserToAddRows = false;//设置DG不显示添加行
xmDG.AllowUserToDeleteRows = false;
nData.getConn();
string sdaSql = "select * from xmjbxx";
sda = new SqlDataAdapter(sdaSql,nData.conn);
sda.Fill(ds);
xmDG.DataSource = ds.Tables[0];
xmNameText.DataBindings.Add("Text", ds.Tables[0], "xmName");
dqText.DataBindings.Add("Text", ds.Tables[0], "dq");
jdText.DataBindings.Add("Text", ds.Tables[0], "jd");
sda.Dispose();
ds.Dispose();
}
//数据更新方法
public void upDatabase(string upStyle)
{
string sql = "";
switch (upStyle)
{
case "mody":
{
sql = "update xmjbxx set xmName=@xmName,jd=@jd,dq=@dq where xmID=@xmID";
break;
}
case "insert":
{
sql = "insert into xmjbxx (xmName,jd,dq) values (@xmName,@jd,@dq)";
DataRow dr = ds.Tables[0].NewRow();
dr["xmName"] = xmNameText.Text.Trim();
dr["jd"] = jdText.Text.Trim();
dr["dq"] = dqText.Text.Trim();
ds.Tables[0].Rows.Add(dr);
break;
}
case "delete":
{
sql = "delete from xmjbxx where xmID=@xmID";
int selectRow=xmDG.CurrentRow.Index;
ds.Tables[0].Rows[selectRow].Delete();
break;
}
}
try
{
SqlCommand sc = new SqlCommand(sql, nData.conn);
sc.Parameters.Add("@xmName", SqlDbType.NChar, 20, "xmName");
sc.Parameters.Add("@xmID", SqlDbType.Int, 4, "xmID");
sc.Parameters.Add("@jd", SqlDbType.NChar, 20, "jd");
sc.Parameters.Add("@dq", SqlDbType.NChar, 20, "dq");
switch (upStyle)
{
case "mody":
{
sda.UpdateCommand = sc;
break;
}
case "insert":
{
sda.InsertCommand = sc;
break;
}
case "delete":
{
sda.DeleteCommand = sc;
break;
}
}
sda.Update(ds.Tables[0]);
MessageBox.Show("保存成功!"+upStyle+ds.Tables[0].Rows[0]["xmID"].ToString());
xmxx.SelectTab("xmxx1");
clearControl(xmxx2, "System.Windows.Forms.TextBox");
xmDG.ReadOnly = true;
xmDG.AllowUserToAddRows = false;//设置DG不显示添加行
xmDG.AllowUserToDeleteRows = false;
}
catch (SqlException ee)
{
MessageBox.Show(ee.Message);
}
}
//初始化控件内TXTBOX值为空
public void clearControl(Control myControl,string myConSty)
{
for (int i = 0; i < myControl.Controls.Count; i++)
{
if (myControl.Controls[i].GetType().ToString().Trim() == myConSty)
{
myControl.Controls[i].Text = "";
}
}
}
public xm_main()
{
InitializeComponent();
}
private void xm_main_Load(object sender, EventArgs e)
{
initial();
}
private void toolStripButton5_Click(object sender, EventArgs e)
{
xmxx.SelectTab("xmxx2");
myStyle="insert";
clearControl(xmxx2, "System.Windows.Forms.TextBox");
}
private void button1_Click(object sender, EventArgs e)
{
upDatabase(myStyle);
}
private void toolStripButton7_Click(object sender, EventArgs e)
{
xmDG.ReadOnly = false;
}
private void toolStripButton6_Click(object sender, EventArgs e)
{
if (MessageBox.Show("确定要删除选定的记录?","删除",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.Yes)
{
upDatabase("delete");
}
}
private void toolStripButton8_Click(object sender, EventArgs e)
{
upDatabase("mody");
}
private void button2_Click(object sender, EventArgs e)
{
clearControl(xmxx2,"System.Windows.Forms.TextBox");
}
private void xmDG_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
}
private void xmDG_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
xmDG.ReadOnly = false;
myStyle = "mody";
xmxx.SelectTab("xmxx2");
}
}
}
--------------------编程问答-------------------- --------------------编程问答-------------------- TextChanged 事件里 或是 foucs 事件里去写数据库的更新语句 --------------------编程问答-------------------- 与事件无关吧?我是点击按钮进行数据更新的... --------------------编程问答-------------------- 问题找到:
必需终止现在编辑状态(BindingContext)后,数据集才会接受更新,这样绑定TEXTBOX才能同部更新到数据库sda.UpdateCommand = sc;
this.BindingContext[ds.Tables[0]].EndCurrentEdit(); --------------------编程问答-------------------- 在focus事件里写语句吧。失去焦点时触发事件
补充:.NET技术 , C#