单个 datagridview 行更新

Posted

技术标签:

【中文标题】单个 datagridview 行更新【英文标题】:Single datagridview row updating 【发布时间】:2012-06-22 15:29:09 【问题描述】:

您能帮忙解决这样的问题吗: 我有两种形式,datagridview 和 SQL 数据库。 在我的第一个表单的加载事件中,我使用存储过程(选择查询)从我的 SQL 数据库中选择一些数据。

SqlConnection con = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand("PROC001", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
datagridview.DataSource = dt;

之后,我可以使用 dt.DefaultView.Filter = .... 过滤或排序我的 datagridview,并在我的网格中仅显示过滤的行。 在 CellMouseDoubleClick 事件中,我的第二个 Form2 出现了。在这种形式中,我通过单击 Button1 更新数据库中的一些值,然后我想更新我选择的 datagridview 行。我的问题是:

1) 如何只更新 datagridview 中选定的行,并且不对所有 datagridview 再次填充执行存储过程。

2) 我的datagridview 已经被过滤了,所以如果我再次执行程序,我的过滤器就会消失。我怎样才能避免这种情况?

3) 在 Form2 上,我正在更新一些数据库值,该值未作为选定字段包含在我的“选择查询”中,但该值在此查询中受到影响。示例:

SELECT Name, SecondName FROM tUsers 
  WHERE id = (SELECT DISTINCT id FROM tProcedures WHERE Code = 'First')

在我的 datagridview 中,我可以看到 Name 和 SecondName,但在 Form2 中,我正在更新 tProcedures 数据库表中的代码。所以更新后我想在datagridview中看到我的新数据,只在选定的行和当前过滤器中。我不想再次将所有数据选择到 datagridview 并破坏了我的过滤器。

是否可以更新单行?可以举一些例子吗?

【问题讨论】:

【参考方案1】:

由于 DataGridView 使用 DataBinding,您必须更新底层数据源,在本例中为 DataTable。请参阅How to: Edit Rows in a DataTable 了解如何执行此操作。

对于过滤器问题,您需要保存并恢复过滤器:

var filter = dt.DefaultView.RowFilter;
UpdateData();
dt.DefaultView.RowFilter = filter;

【讨论】:

以上是关于单个 datagridview 行更新的主要内容,如果未能解决你的问题,请参考以下文章

DataGridView数据绑定任意对象的数组

datagridview中删除行并更新数据库

更改 datagridview 行中单个单元格的样式

vb中datagrid控件怎么更新?

Datagridview全行选择但获得单个单元格值

c#在datagridview中删除指定行并更新到数据库