我将解释我的问题:我有一个DataGrid,由DataSet填充,其中包含来自Project 2010服务器的信息。我想从我的DataGrid中选择一行或多行,当用户单击一个按钮时,这些行将从原始DataGrid中删除,并发送到第二行。
我经常搜索,但我无法知道如何做到这一点!也许使用DataGrids并不是一个好主意或者idk,但我对WPF来说是个新手,对我来说这似乎是最好的方法!
因此,如果你能给我一个提示,将数据从DataGrid移动到另一个,或任何其他方法来做到这一点,它真的很棒!
答案 0 :(得分:0)
是的,处理数据网格有时候会很痛苦,但我仍然喜欢使用它。
删除单行并不是一项艰巨的任务,我通常会从数据库中删除然后再次重新加载数据网格,这可能会对您有所帮助:
将其添加到xaml中的datagrid:
<DataGrid AutoGenerateColumns="False" CommandManager.PreviewExecuted="dataGrid1_PreviewDeleteCommandHandler" Name="dataGrid1" />
然后在代码中创建类似这样的方法:
private void dataGrid1_PreviewDeleteCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
if (e.Command == DataGrid.DeleteCommand)
{
//Get the row data before deleting
DataGridRow selectedRow = (DataGridRow)dataGrid1.ItemContainerGenerator.ContainerFromIndex(dataGrid1.SelectedIndex);
DataRowView rv = (DataRowView)selectedRow.Item;
// First cell in the row is usually the ID of the row (you can modify that in your database)
string recNoToDelete = rv.Row[0].ToString();
if (recNoToDelete == "")
{
e.Handled = false;
return;
}
if (MessageBox.Show("Are you sure to delete this row?","", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
{
SqlConnection Conn = new SqlConnection(connectionString);
SqlCommand Comm = new SqlCommand("", Conn);
// Delete
Comm = new SqlCommand("", Conn);
Comm.CommandText = "Delete from Table where field=@field";
Comm.Parameters.AddWithValue("@field", recNoToDelete);
Conn.Open();
Comm.ExecuteNonQuery();
Conn.Close();
// Reload all the data again in the datagrid after deletion of that record
ReloadData();
}
else
{
//record is not valid or has been deleted or manipulated
//cancel the delete operation
e.Handled = true;
return;
}
}
}
但是,当用户点击该行并按“删除”键时,这将起作用。至于删除多个列,我仍然没有想到这一点,但是当我这样做时,我会更新答案。
我希望这可以帮助你至少开始。
答案 1 :(得分:0)
关于如何删除多行;
首先使选择模式扩展到dataGrid
SelectionMode="Extended"
然后selectedItems属性将返回所选对象的列表(取决于您绑定到DataGrid的内容)
迭代列表并从数据库中删除项目并刷新。 例如:
For Each item As <object> In Me.MyDataGrid.SelectedItems
--delete record--
Next
答案 2 :(得分:0)
我的答案是:使用DataGrid是一种糟糕的方式,我必须直接使用DataSet!