我正在尝试从datagrid更新mysql db,但它不起作用。添加的数据不在数据库中,并且没有错误,为什么会发生这种情况。我已经试着解决这个问题好几天了。
private void dtGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
MySqlConnection conn = DBUtils.GetDBConnection();
string table = "brands";
string sql = "SELECT * FROM "+table;
MySqlDataAdapter myDataAdapter = new MySqlDataAdapter(sql, conn);
conn.Open();
MySqlCommandBuilder myCommandBuilder = new MySqlCommandBuilder(myDataAdapter);
myDataAdapter.InsertCommand = myCommandBuilder.GetInsertCommand();
myDataAdapter.UpdateCommand = myCommandBuilder.GetUpdateCommand();
myDataAdapter.DeleteCommand = myCommandBuilder.GetDeleteCommand();
DataSet myDataSet = new DataSet();
myDataAdapter.Fill(myDataSet, table);
myDataAdapter.AcceptChangesDuringUpdate = true;
myDataAdapter.Update(myDataSet, table);
conn.Close();
}
3条答案
按热度按时间g6baxovj1#
看起来您正在运行此代码,只要用户已按名称进行了编辑
RowEditEnding
".所以我认为问题是你只是在创造
MySqlCommandBuilder
编辑完成后。你需要创建
MySqlCommandBuilder
首先,进行编辑,然后获取更新/插入/删除命令。e、 g.类似于以下内容(在vb中很抱歉,但您了解要点):
编辑
@尤金,你的工作是什么
DataGrid
一定要吗?想必你正在设定一个DataView
作为DataContext
?如果是这样的话,那么你将使用
DataAdapter
填充DataView
在页面加载上?这就是DataAdapter
你需要初始化你的MySqlCommandBuilder
与。请尝试以下操作:
宣布你
DataAdapter
,DataSet
以及DataView
在页面顶部。使用
BeginningEdit
dtgrid的处理程序来初始化MySqlCommandBuilder
在你宣布的DataAdapter
使用RowEditEnding
运行DataAdapter.Update
命令e、 g.(据我所知,我使用的是sql,但mysql的工作原理是一样的)
我还设置了
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged
论图书馆的装订DataGrid
.vsnjm48y2#
@尤金
所以这里:
然后用
您正在创建一个新的数据表,然后向其中添加一个现有的数据表。这就是为什么所有行都被再次添加。
尝试将代码更改为。xaml编号:
c级#
这会丢失按钮,但您现在可以编辑和添加行,而不需要按钮。向DATAGRID底部的空白行添加行。
r1zk6ea13#
@simon,我做了不同的事情,现在它插入了dtgrid中的所有值,而不仅仅是新值,也许我没有正确地共享它。填充dbgrid:
插入新项目
xaml公司