2014-10-17 65 views
0

我有一个从MySQL查询生成的DataGrid。我想能够通过修改DataGrid直接编辑数据库。基本上,我需要的是产生这样的字符串用户已完成编辑单元格后:MySQL更新一次WPF DataGrid单元格编辑

伪代码:

“UPDATE current_table SET current_column_name = new_cell_value WHERE ID =数字,是在隐藏的第一个单元格编辑的行“

什么是最简单的方法来实现这一点?

我试过看DataGrid的属性和事件,但到目前为止我找不到任何“CellEditEnded”事件,也不能找到如何获取新值或在该行的第一个单元格中的id。

编辑: 好吧,我已经取得了一些进展,我现在能够得到id和列名称,但问题是我无法获得新的单元格值。我认为问题在于此代码在CellEditEnding-event中触发,所以更改尚未提交。我怎样才能解决这个问题?

DataRowView dataRow = (DataRowView)gameDatagrid.SelectedItem; 
int index = gameDatagrid.CurrentCell.Column.DisplayIndex; 
string columnName = gameDatagrid.CurrentCell.Column.Header.ToString(); 
string cellValue = dataRow.Row.ItemArray[index].ToString(); 
string id = dataRow.Row.ItemArray[0].ToString(); 
MessageBox.Show(id + " : " + columnName + " : " + cellValue); 
+1

看看https://social.msdn.microsoft.com/Forums/vstudio/en-US/e71304ed-22b1-4882-9f5c-d9e42ad97445/how-to -get-new-value-in-a-datagrid-cell-after-editing-cell?forum = wpf – 2014-10-17 15:18:18

+0

现在一切都像魅力一样,谢谢Jossef! – fnx 2014-10-17 15:23:58

+0

Fo-shizzle my nizzle :)发布你的问题的答案 – 2014-10-17 15:25:28

回答

0

感谢有用的评论,我能解决这个问题。完整的代码如下:

private void gameDatagrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
    { 
     TextBox t = e.EditingElement as TextBox; 
     DataRowView dataRow = (DataRowView)gameDatagrid.SelectedItem; 
     int index = gameDatagrid.CurrentCell.Column.DisplayIndex; 
     string columnName = gameDatagrid.CurrentCell.Column.Header.ToString(); 
     string newValue = t.Text; 
     int id = (int)dataRow.Row.ItemArray[0]; 
     string query = "UPDATE table_name SET " + columnName + "=\"" + newValue + "\" WHERE id=" + id; 
    }