在开发一个桌面应用,从数据导出到一个datagrid,然后在datagrid编辑,编辑后更新数据到数据库,发现以下的问题
编辑方式有两种:
1、 双击单元格,手工输入数据,这种情况可以更新到数据库,但只能一个个单元格编写数据
2、把数据从excel复制后,粘贴到datagrid,这种情况无法更新到数据库。
初步查找:采用1方法双击编辑datagrid单元格,数据已经在datagrid.itemssource的表格更新
采用2方法,数据只是显示在datagrid界面,datagrid.itemssource没有更新
更新的代码如下:
private void savetemp_Click(object sender, RoutedEventArgs e)//更新结果到数据库
{
try
{
open(con);
string sql1 = "select * from 测试记录表 ";
SqlDataAdapter sqlda = new SqlDataAdapter();//
sqlda.SelectCommand = new SqlCommand(sql1, connect);
SqlCommandBuilder cb = new SqlCommandBuilder(sqlda);
System.Data.DataTable dt = new System.Data.DataTable();
dt = ((DataView)inputrecord.ItemsSource).Table;
sqlda.Update(dt);
MessageBox.Show("OK");
close(con);
}
catch (Exception)
{
MessageBox.Show("FAIL"); ;
}
}
软件的界面截图:双击编辑输入的数据,可以成功更新到数据库
粘贴过来的:如果双击该单元格,变空白,该数据只在前端,求把数据更新到后台的方法
补充粘贴的代码,红色是关键
public void paste(DataGrid dataGrid, int cIndex, int rIndex)//粘贴到datagrid
{
// 获取剪切板的内容,并按行分割
string pasteText = Clipboard.GetText();
if (string.IsNullOrEmpty(pasteText))
return;
if (dataGrid.SelectedCells.Count > 0)
{
cIndex = dataGrid.CurrentColumn.DisplayIndex;
}
string[] Rinfo = pasteText.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
if (cIndex > -1 && rIndex > -1)
{
int rSum = Math.Min(Rinfo.Length, dataGrid.Items.Count - rIndex);
for (int i = 0; i < rSum; i++)
{
string[] Cinfo = Rinfo[i].Split(new string[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
int cSum = Math.Min(Cinfo.Length, dataGrid.Columns.Count - cIndex);
for (int j = 0; j < cSum; j++)
{
DataGridColumn dgcC = dataGrid.Columns[cIndex + j];
try
{
(dataGrid.Columns[cIndex + j].GetCellContent(dataGrid.Items[rIndex + i]) as TextBlock).Text = Cinfo[j];
}
catch
{
MessageBox.Show("粘贴失败!");
}
}
}
}
}