【发布时间】:2014-03-21 01:01:17
【问题描述】:
我在 C# Visual Studio 2012 中有一个简单的应用程序,其中包含一个显示 SQL 表中记录的数据网格。 我已经添加了文本框和组合框来添加新记录,效果很好。
我想要做的是直接在数据网格中更新现有记录。我有更新查询的按钮,但我有一个问题。如何识别网格中被修改的记录?
免得说网格显示
ID Name Age Gender
---- -------- ---- --------
1 Steven 21 M
2 Dan 34 M
此数据显示使用
SELECT * FROM table.
我进入网格并将第二条记录的年龄从 43 修改为 36。 为了保存它,我需要运行一个更新查询,但我怎么知道被修改的 ID 是 2?有什么办法我可以做到这一点?还是其他方式?
编辑:
更新数据网格的工作方式如下:
SqlConnection con = new SqlConnection("user id=testuser12;" +
"password=Reporting11#;Data Source=SERVER;" +
// "Trusted_Connection=yes;" +
"Initial Catalog=Partner_database; " +
"connection timeout=30");
SqlCommand command = new SqlCommand("select * from [dbo].[Test_table]", con)
SqlDataAdapter sda = new SqlDataAdapter(command);
DataSet set = new DataSet("cucu");
sda.Fill(set,"cucu");
dataGridView1.DataSource = set;
dataGridView1.DataMember = "cucu";
我现在正在测试看看如何做 DataSet.AcceptChanges();部分,因为如果我使用按钮,我该如何调用数据集?因为数据集在代码的另一部分。
EDIT2:我试图将其写入答案,但我的答案被删除,没有任何解释,所以我不得不在这里进行另一次编辑。
我已经尝试过你说的,但它似乎不起作用。我有显示数据的数据网格,但是当我修改现有报告并单击保存时出现错误:“当传递带有修改行的 DataRow 集合时,更新需要有效的 UpdateCommand。”
保存按钮代码为:
private void test_tableBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.test_tableBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.partner_databaseDataSet);
}
而fillby函数是:
private void fillByToolStripButton_Click(object sender, EventArgs e)
{
try
{
this.test_tableTableAdapter.FillBy(this.partner_databaseDataSet.Test_table, valueToolStripTextBox.Text);
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
保存时错误显示在以下行:
this.tableAdapterManager.UpdateAll(this.partner_databaseDataSet);
我需要修改保存按钮的作用吗?没有“.AcceptChanges”。
【问题讨论】:
-
你试过这个 DataGridView.CellValueChanged 事件了吗?
-
不,我没有。将搜索此并尝试。
标签: c# sql-server visual-studio-2012