单个 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 行更新的主要内容,如果未能解决你的问题,请参考以下文章