加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从DataGridView自动更新数据库中的值

发布时间:2020-12-15 03:51:41 所属栏目:百科 来源:网络整理
导读:我正在使用 MySql与C#结合使用项目. DataGridView的数据由DB中多个表的连接提供.要显示数据我使用以下,工作,代码: adapter.SelectCommand = new MySqlCommand( " SELECT" + " l.lot AS Lot,"+ " m.comment AS Bemerkungen," + ... (multiple columns from d
我正在使用 MySql与C#结合使用项目.
DataGridView的数据由DB中多个表的连接提供.要显示数据我使用以下,工作,代码:
adapter.SelectCommand = new MySqlCommand(
            " SELECT" +
            " l.lot AS Lot,"+
            " m.comment AS Bemerkungen," +
            ... (multiple columns from different tables) ...
            " FROM m " +
            " JOIN m2p ON m.m2p_id = m2p.id" +
            ... (more joins) ...,this._mySqlConnection);
dataGridView1.DataSource = data;
adapter.Fill(data);

现在,GUI的用户可以修改某个列(“注释”列).所以我分配了一个eventHandler到CellEndEdit事件,当用户修改了允许的列的adapter.Update(data)被调用.现在这不执行正确的操作.

要定义我的update命令,我使用以下代码:

adapter.UpdateCommand = new MySqlCommand(
                " UPDATE m" +
                " JOIN  l ON m.l_id = l.id" +
                " SET m.comment = @comment" +
                " WHERE l.lot = @lot",this._mySqlConnection);
adapter.UpdateCommand.Parameters.Add("@comment",MySqlDbType.Text,256,"Bemerkungen");
adapter.UpdateCommand.Parameters.Add("@lot","Lot");

你能解释一下我如何修复我的代码来自动更新数据库?

编辑:
添加进一步的源代码:

private MySqlDataAdapter warenlagerMySqlDataAdapter,kundenMySqlDataAdapter;
private DataTable warenlagerData,kundenData;
private DataGridView warenlagerGridView;

private void updateWarenlagerView(object sender,EventArgs e) {
            warenlagerMySqlDataAdapter.Update(warenlagerData);
}

private void initialzeFields() {
            warenlagerGridView.CellEndEdit += new DataGridViewCellEventHandler(this.updateWarenlagerView);
            warenlagerMySqlDataAdapter = new MySqlDataAdapter();
            warenlagerData = new DataTable();
            }

private void initializeWarenlagerView() {
            warenlagerMySqlDataAdapter.SelectCommand = new MySqlCommand(
                " SELECT" +
                " c.name AS Ursprung," +
                " m2p.art_nr AS ArtNr," +
                " m.delivery_date AS Eingangsdatum," +
                " CONCAT(FORMAT(m.delivery_amount / 100,2),'kg') AS Eingangsmenge," +
                " l.lot AS Lot," +
                " m.quality AS Qualit?t," +
                " m.comment AS Bemerkungen," +
                " CONCAT(m.units,'kg') AS Units," +
                " CONCAT(FORMAT(s.amount / 100,'kg') AS Lagermenge," +
                " FORMAT(m.base_price / 100,2) AS Einkaufspreis," +
                " FORMAT(s.amount/10000 * m.base_price,2) AS Wert" +
                " FROM mushrooms AS m " +
                " JOIN mushroom2path AS m2p ON m.mushroom2path_id = m2p.id" +
                " JOIN countries AS c ON m.origin_id = c.id" +
                " JOIN lots AS l ON m.lot_id = l.id" +
                " JOIN stock AS s ON s.mushrooms_id = m.id",this._mySqlConnection);
            warenlagerGridView.DataSource = warenlagerData;
            warenlagerMySqlDataAdapter.Fill(warenlagerData);
            warenlagerMySqlDataAdapter.UpdateCommand = new MySqlCommand(
                " UPDATE mushrooms AS m" +
                " JOIN lots AS l ON m.lot_id = l.id" +
                " SET m.comment = @comment" +
                " WHERE l.lot = @lot",this._mySqlConnection);
            warenlagerMySqlDataAdapter.UpdateCommand.Parameters.Add("@comment","Bemerkungen");
            warenlagerMySqlDataAdapter.UpdateCommand.Parameters.Add("@lot","Lot");
        }

这是关于这个问题的整个代码.我100%确定adapter.Update(data)方法被调用(调试).而传递给适配器的数据.Update()方法包含新的数据.

解决方法

请尝试这个更新查询它的工作原理.
UPDATE mushrooms 
SET comment = @comment
WHERE 
l_id=(select id from l where lot=@lot)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读