我在datagridview
中显示数据库表。我可以将记录从datagridview
正确保存到sql中的数据库。
现在,我想修改和更改一些记录并将这些更改保存在数据库中。我怎样才能做到这一点?我正在使用附加到datasource
的数据集的绑定datatable
。
private void Form1_Load(object sender, EventArgs e)
{
this.cPDM0020TableAdapter.Fill(this.cpdm_dataset.CPDM0020);
}
private void btnSave_Click(object sender, EventArgs e)
{
string code = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper();
string currency_Name = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper();
string boolBase = dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString();
string local_per_Base = dataGridView1[3, dataGridView1.CurrentCell.RowIndex].Value.ToString();
string base_per_Local = dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value.ToString();
string insert_sql = "INSERT INTO centraldb.dbo.CPDM0020(Code,Currency_Name,Base,Local_per_Base,Base_per_Local)VALUES('" +
code + "','" +
currency_Name + "','" +
boolBase + "','" +
local_per_Base + "','" +
base_per_Local + "')";
if (this.ExecuteSql(insert_sql))
{
MessageBox.Show("Record Inserted Successfully.");
}
else
{
MessageBox.Show("Insert Failed");
}
}
public bool ExecuteSql(string command)
{
SqlCommand sqlCommand = new SqlCommand(command, connection);
connection.Open();
sqlCommand.ExecuteNonQuery();
this.cPDM0020TableAdapter.Fill(this.cpdm_dataset.CPDM0020);
dataGridView1.DataSource = cpdm_dataset.CPDM0020;
sqlCommand.Dispose();
connection.Close();
return true;
}
我可以在数据库和datagridview
中轻松保存新条目,但我无法编辑已存在的记录。在编辑后点击保存按钮,它会再次显示之前的值。请帮忙。
答案 0 :(得分:2)
您的数据库不受您的应用控制;当数据发生变化时,它不会将某些事件发送回您的应用程序。您必须主动重新查询数据库以进行更改。
使用DataGridView的更典型方法是首先将更改应用于本地数据副本,然后使用DataAdapter将更改推送回数据库。这样可以避免在进行更改时随时刷新整个本地数据集。请参阅使用DataAdapter更新数据源(ADO.NET)。
基本顺序是:
答案 1 :(得分:1)
您只需先使用选择命令
检查表中是否存在记录“select * from centraldb.dbo.CPDM0020 Where Code ='”+ Code +“'”;
你可以使用这个功能:
public bool IsExistRecord(string Query)
{
try
{
DataTable DT = new DataTable();
SqlCommand CMD = new SqlCommand(Query, Connection);
SqlDataAdapter DA = new SqlDataAdapter(CMD);
DA.Fill(DT);
if (DT.Rows.Count > 0)
return true;
else
return false;
}
catch (Exception ex)
{
return false;
}
}
如果记录存在则执行更新查询(如果不存在)执行插入查询。
答案 2 :(得分:0)
尝试使用以下代码>
try
{
var row = gvTransactions.CurrentRow;
int ID= int.parse(row.Cells[0].Value.ToString());
string abc=row.Cells[0].Value.ToString();
}
catch(exception ex)
{
}
获取此类值。
注意:不要在catch块中写任何东西
然后根据您的需要触发插入/更新查询。
答案 3 :(得分:0)
制作更新按钮:
private void btnUpdate_Click(object sender, EventArgs e) {
string code = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper();
string currency_Name = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper();
string boolBase = dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString();
string local_per_Base = dataGridView1[3, dataGridView1.CurrentCell.RowIndex].Value.ToString();
string base_per_Local = dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value.ToString();
string select_qry = "Select * from centraldb.dbo.CPDM0020 Where Code = '" + Code + "'";
if(IsExistRecord(select_qry))
{
string update_qry = Update centraldb.dbo.CPDM0020 set Code,Currency_Name='" + currency_Name + "',Base='" + boolBase + "',Local_per_Base,Base_per_Local='" + base_per_Local + "' where code='" + code +"'";
if (this.ExecuteSql(update_qry)) {
MessageBox.Show("Record Updated Successfully.");
} else {
MessageBox.Show("Update Failed");
}
}
}
//code taken from Mohammad abumazen
public bool IsExistRecord(string Query)
{
DataTable DT = new DataTable();
SqlCommand CMD = new SqlCommand(Query, Connection);
SqlDataAdapter DA = new SqlDataAdapter(CMD);
DA.Fill(DT);
if (DT.Rows.Count > 0)
return true;
else
return false;
}
答案 4 :(得分:0)
由于您使用的是dataSet
,因此您可以在tableApdater
中创建命令。
以下是关于Creating a Data Access Layer
的文章,因为您在winforms
,您可以在项目中应用该文章。
我希望此图片会为您提供save
,update
,edit
,delete
的提示。