从DataGrid获取整行

时间:2014-03-04 17:12:20

标签: c# wpf datagrid

我将解释我的问题:我有一个DataGrid,由DataSet填充,其中包含来自Project 2010服务器的信息。我想从我的DataGrid中选择一行或多行,当用户单击一个按钮时,这些行将从原始DataGrid中删除,并发送到第二行。

我经常搜索,但我无法知道如何做到这一点!也许使用DataGrids并不是一个好主意或者idk,但我对WPF来说是个新手,对我来说这似乎是最好的方法!

因此,如果你能给我一个提示,将数据从DataGrid移动到另一个,或任何其他方法来做到这一点,它真的很棒!

3 个答案:

答案 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!