因为我想在DataGridView修改里面的值 单击 保存 就把DataGridView内的修改后的值更新到数据库 下面是自己的一些想法 但是没成功
//这里是一个实体类 nuit
baking.Model.UnitTable unit = new baking.Model.UnitTable() ;
//这里是业务逻辑类
baking.BLL.UnitTable unitBll = new baking.BLL.UnitTable();
//循环
foreach (DataGridViewRow row in this.dataGridViewShow.Rows)
{//name 是我DataGridView 里面要修改的字段 re 一样
unit.unit_name = row.Cells["name"].Value.ToString();
unit.flag = row.Cells["re"].Value.ToString();
//这里的更新方法是早就写好的 我一会贴出来
unitBll.Update(unit);}// 更新一条数据public void Update(baking.Model.UnitTable model)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("update unit_table set ");
strSql.Append("unit_name=@unit_name,");
strSql.Append("flag=@flag,");strSql.Append(" where unit_id=@unit_id ");
SqlParameter[] parameters = {
new SqlParameter("@unit_id", SqlDbType.VarChar,50),
new SqlParameter("@unit_name", SqlDbType.VarChar,50),
new SqlParameter("@flag", SqlDbType.VarChar,50),parameters[0].Value = model.unit_id;
parameters[1].Value = model.unit_name;
parameters[2].Value = model.flag;
DbHelperSQL.ExecuteSql(strSql.ToString(),parameters);
}
请高手指点一 二。。 谢谢
//这里是一个实体类 nuit
baking.Model.UnitTable unit = new baking.Model.UnitTable() ;
//这里是业务逻辑类
baking.BLL.UnitTable unitBll = new baking.BLL.UnitTable();
//循环
foreach (DataGridViewRow row in this.dataGridViewShow.Rows)
{//name 是我DataGridView 里面要修改的字段 re 一样
unit.unit_name = row.Cells["name"].Value.ToString();
unit.flag = row.Cells["re"].Value.ToString();
//这里的更新方法是早就写好的 我一会贴出来
unitBll.Update(unit);}// 更新一条数据public void Update(baking.Model.UnitTable model)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("update unit_table set ");
strSql.Append("unit_name=@unit_name,");
strSql.Append("flag=@flag,");strSql.Append(" where unit_id=@unit_id ");
SqlParameter[] parameters = {
new SqlParameter("@unit_id", SqlDbType.VarChar,50),
new SqlParameter("@unit_name", SqlDbType.VarChar,50),
new SqlParameter("@flag", SqlDbType.VarChar,50),parameters[0].Value = model.unit_id;
parameters[1].Value = model.unit_name;
parameters[2].Value = model.flag;
DbHelperSQL.ExecuteSql(strSql.ToString(),parameters);
}
请高手指点一 二。。 谢谢
1.首先在页面上拖一个dataset,在里面tables集合里建立一个和数据库表结构相同的table
2.datagridview绑定上这个dataset及其里面table
3.在cs代码中
OdbcDataAdapter dap = new OdbcDataAdapter();
private void FormResult_Load(object sender, EventArgs e)
{ OdbcCommand cmd3 = new OdbcCommand("select * from project_using", DB.myConnection);
dap.SelectCommand = cmd3;
dataSet_project_using.Tables["project_using"].Clear();
dap.Fill(dataSet_project_using.Tables["project_using"]);
}
private void btnSave_Click(object sender, EventArgs e)
{
try
{
OdbcCommandBuilder ocb = new OdbcCommandBuilder(dap);
dap.Update(dataSet_project_using.Tables["project_using"]);
dataSet_project_using.Tables["project_using"].AcceptChanges(); MessageBoxEx.Show("发布成功");
}
catch (Exception ex)
{
MessageBoxEx.Show("发布失败" + ex.Message);
}
}
后面这个逗号是不要的,
model.unit_id赋值没有
最好就是跟踪一下sql语句,放到数据库里面执行以下,看看会不会报错
如果是的话, 可以采用如下的方式: private SqlConnection thisConnection;
private SqlDataAdapter thisAdapter;
private SqlCommandBuilder thisBuilder;
private void button1_Click(object sender, EventArgs e)
{
thisConnection = new SqlConnection(
@"Data Source=HUI\SQLSERVER;Initial Catalog=Northwind;Integrated Security=True"); //数据源
thisAdapter = new SqlDataAdapter(
"SELECT CustomerID, CompanyName FROM Customers", thisConnection); //指定数据表
thisBuilder = new SqlCommandBuilder(thisAdapter); DataTable dt = new DataTable();
thisAdapter.Fill(dt); for (int i = 0; i < 5; i++)
{
Console.WriteLine(dt.Rows[i]["CompanyName"]); //输出值
dt.Rows[i]["CompanyName"] = string.Format("{0}Acme, Inc.{1}", i,i); //更改值
} Update(dt);
} private void Update(DataTable model) //更新数据
{
thisAdapter.Update(model); //提交更新
for (int i = 0; i < 5; i++) //输出更新后的值
{
Console.WriteLine(model.Rows[i]["CompanyName"]);
}
thisConnection.Close();
}
另外看看你的datagridview的columns是不是有名称
也就是row.Cells["name"].Value.ToString()是不是获得了值
你这里的方法本身没有什么错误,不过可以有更好的办法
那里的strSql.Append("flag=@flag,"); 后面的“,”可以不用管 这里是正确的因为有很多我删除了 只留了有用的。。 请问有什么办法,,我测试了名字能用 请问还有什么办法 请讲了出, 来
当点一下显示全问的时候 又还原了
http://topic.csdn.net/u/20090727/09/0973be98-b51a-43c3-8932-be4acf318194.html
在DGV的RowsValidated事件里写方法,手动更新当前已修改的行试试。
如果是删除,在DGV的RowsDeleted事件里处理。不要用循环遍历的方法,这样的效率极低。然后如果是自动绑定:你的DataSource里应该定义删除方法。这样就不需要什么后台代码了,建议看看MSDN相关教程。
你看看返回值 是多少
你说的程序没报错,我觉得最有可能的原因就是出在这句:
strSql.Append(" where unit_id=@unit_id ");
也就是@unit_id这个ID在数据库里不存在,而你以为他已经存在,update语句没找到符合WHERE条件的记录是不会报错的,只是不更新罢了
所以建议调试下.
个人凭经验觉得90%是where的@unit_id不存在,或是那10%,update是事务的但没提交.但看你代码好象是动软生成的,应该不是事务的.还有就是保存好后重新绑定下datagridview
private void btnSave_Click(object sender, EventArgs e)
{
baking.Model.UnitTable unit =null ;
baking.BLL.UnitTable unitBll = null;foreach (DataGridViewRow row in this.dataGridViewShow.Rows)
{unit = new baking.Model.UnitTable();
unitBll = new baking.BLL.UnitTable();
unit.unit_id = row.Cells["unit_id"].Value.ToString();
unit.unit_name = row.Cells["name"].Value.ToString();
unit.flag = row.Cells["re"].Value.ToString();unitBll.Update(unit);}原来是这样因为 updata里面的要求ID 号 把ID 号加上去就对了
xiao_jun_0820
感谢以上2位 。 感谢
{
SqlConnection conn = new SqlConnection(connString);
cmd = conn.CreateCommand();
cmd.CommandText = "select * from Test_Table";
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
da.Update(ds);
dataGridView1.Update();
}