【问题标题】:Delete selected row in datagrid and also in database?删除数据网格和数据库中的选定行?
【发布时间】:2016-05-29 21:00:56
【问题描述】:

当我在 datagridview 中选择一行时,我想从数据库中删除。 我尝试了 2 种不同的方法。 使用这种方法,我只能删除几行。

cmd.CommandText = "delete from dbo.Scenarist  where idScenarist=@idScenarist";
cmd.Parameters.Add(new SqlParameter("@idScenarist", dataGridScenarist.SelectedIndex));

我也尝试使用 SelectedRows,但出现此错误:

'System.Windows.Controls.DataGrid' 不包含对 'SelectedRow' 并且没有扩展方法 'SelectedRow' 接受第一个 可以找到“System.Windows.Controls.DataGrid”类型的参数 (您是否缺少 using 指令或程序集引用?)

是一个 WPF 应用程序,我不能使用 DataGridView.Only DataGrid。 谢谢!

【问题讨论】:

    标签: c# wpf datagridview datagrid


    【解决方案1】:

    您可能想在此处使用DataGridView。它提供对SelectedRows 的访问,这是DataGridViewRows 的集合。遍历该集合并使用包含相应 id 的列中的值更新您的 @idScenarist 参数,并在每个循环中执行删除命令对象。

    这是一个基本的例子:

            cmd.CommandText = "delete from dbo.Scenarist  where idScenarist=@idScenarist";
            SqlParameter parm = new SqlParameter("@idScenarist", SqlDbType.Int);
            cmd.Parameters.Add(parm);
    
            foreach (DataGridViewRow row in dataGridScenarist.SelectedRows)
            {
                parm.Value = row.Cells["idScenarist"].Value;
                cmd.ExecuteNonQuery();
            }
    

    【讨论】:

    • 或者最好还是使用“in”语法,一次调用。
    • 为此,您必须对每个参数进行字符串连接,并为每个值添加一个参数对象。绝对可行,并且根据您的应用程序,可能是更好的方法。我的偏好是在处理未知最大值时避免动态构建 SQL 查询。
    • 如果您使用 linq var result = String.Join(",", rows.select(r => r.id.ToString()));,您可以一次性完成,但最好不要知道删除集的大小。
    • 我不能使用 DataGridView,因为它是一个 WPF 应用程序!
    • 我可以看看一些替代方法,但我需要您提供更多信息。您是否已将 DataGrid 绑定到可以用作循环遍历的项目集合的东西?
    猜你喜欢
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    相关资源
    最近更新 更多