0

你能帮忙解决这样的问题吗:我有两个表单,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 并破坏了我的过滤器。

是否可以更新单行?你能提供一些例子吗?

4

1 回答 1

0

由于 DataGridView 使用 DataBinding,因此您必须更新基础数据源,在本例中为 DataTable。有关如何执行此操作的信息,请参见如何:编辑 DataTable中的行。

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

var filter = dt.DefaultView.RowFilter;
UpdateData();
dt.DefaultView.RowFilter = filter;
于 2012-06-22T15:46:58.490 回答