在datagridview中插入了多个重复条目 [英] Inserted multiple duplicate entry in datagridview
本文介绍了在datagridview中插入了多个重复条目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
即时创建一个应用程序其中用户可以在中输入详细信息 > datagridview数据已成功插入但当我再次检查时它显示多个条目已完成一个数据我粘贴在这里我插入的代码和另一个查询我有iam试图< span class =code-keyword>执行更新,但它给出了 value 给出 一个或多个必需参数例外即时通讯我也提供该代码
我尝试了什么:
插入代码:
private void dataGridView1_CellValueChanged( object sender,DataGridViewCellEventArgs e)
{
account = dataGridView1.Rows [e.RowIndex] .Cells [ AccountNumber]。Value.ToString();
if (account == )
{
account1 = 0 ;
}
else
{
account1 = Convert.ToInt32(dataGridView1.Rows [e.RowIndex] .Cells [ AccountNumber]。Value.ToString());
}
if (account1 == 0 )
{
string connectionString = null ;
connectionString = ConfigurationManager.ConnectionStrings [ AccessConnectionString]。ConnectionString;
con.ConnectionString = connectionString;
string cmd1 = 插入Ledger([AccountNumber],[Account],[Date],[Description],[Post_Ref],[Debit],[Credit],[Balance])值(?,?,?,?,?,?, ?,?)跨度>;
OleDbCommand cmd = new OleDbCommand(cmd1,con);
con.Open();
cmd.CommandType = CommandType.Text;
int accountNumber;
bool accountHasValue = int .TryParse(dataGridView1.Rows [e.RowIndex ] .Cells [ AccountNumber]。Value.ToString(), out accountNumber);
if (accountHasValue)
{
cmd.Parameters.AddWithValue( @ AccountNumber,accountNumber);
}
else
{
cmd.Parameters.AddWithValue( @ AccountNumber,DBNull.Value);
}
string accounts = dataGridView1.Rows [e.RowIndex] .Cells [ 帐户]。Value.ToString();
cmd.Parameters.AddWithValue( @ Account,accounts);
DateTime datetime;
bool dateTimeHasValue = DateTime.TryParse(dataGridView1.Rows [e.RowIndex] .Cells [ 日期]。Value.ToString(), out datetime);
if (dateTimeHasValue)
{
cmd.Parameters.AddWithValue( @ Date,datetime);
}
else
{
cmd.Parameters.AddWithValue( @ Date,DBNull.Value);
}
string 描述= dataGridView1.Rows [e.RowIndex] .Cells [ Description]。Value.ToString();
cmd.Parameters.AddWithValue( @ Description,Description);
string Post_Ref = dataGridView1.Rows [e.RowIndex] .Cells [ Post_Ref]。Value.ToString();
cmd.Parameters.AddWithValue( @ Post_Ref,Post_Ref);
int 借记;
bool debitHasValue = Int32 .TryParse(dataGridView1.Rows [e.RowIndex] .Cells [ 借方]。Value.ToString(), out 借记);
if (debitHasValue)
{
cmd.Parameters.AddWithValue( @ Debit,debit);
}
else
{
cmd.Parameters.AddWithValue( @ Debit,DBNull.Value);
}
int 积分;
bool CreditsHasValue = Int32 .TryParse(dataGridView1.Rows [e.RowIndex] .Cells [ Credit]。Value.ToString(), out 学分);
if (CreditsHasValue)
{
cmd.Parameters.AddWithValue( @ Credit,Credits);
}
else
{
cmd.Parameters.AddWithValue( @ Credit,DBNull.Value);
}
int 余额;
bool BalancesHasValue = Int32 .TryParse(dataGridView1.Rows [e.RowIndex] .Cells [ Balance]。Value.ToString(), out 余额);
if (BalancesHasValue)
{
cmd.Parameters.AddWithValue( @ Balance,余额);
}
else
{
cmd.Parameters.AddWithValue( @ Balance,DBNull.Value);
}
cmd.ExecuteNonQuery();
con.Close();
}
更新代码:
else
{
string cmd1 = update Ledger set [AccountNumber] =?,[Account] = ?,[Date] =?,[Description] =?,[Post_Ref] = ?, [Debit] =?,[Credit] =?,[Balance] =?where AccountNumber =?;
OleDbCommand cmd = new OleDbCommand(cmd1,con);
con.Open();
cmd.CommandType = CommandType.Text;
int accountNumber;
bool accountHasValue = int .TryParse(dataGridView1.Rows [e.RowIndex ] .Cells [ AccountNumber]。Value.ToString(), out accountNumber);
if (accountHasValue)
{
cmd.Parameters.AddWithValue( @ AccountNumber,accountNumber);
}
else
{
cmd.Parameters.AddWithValue( @ AccountNumber,DBNull.Value);
}
string accounts = dataGridView1.Rows [e.RowIndex] .Cells [ 帐户]。Value.ToString();
cmd.Parameters.AddWithValue( @ Account,accounts);
DateTime datetime;
bool dateTimeHasValue = DateTime.TryParse(dataGridView1.Rows [e.RowIndex] .Cells [ 日期]。Value.ToString(), out datetime);
if (dateTimeHasValue)
{
cmd.Parameters.AddWithValue( @ Date,datetime);
}
else
{
cmd.Parameters.AddWithValue( @ Date,DBNull.Value);
}
string 描述= dataGridView1.Rows [e.RowIndex] .Cells [ Description]。Value.ToString();
cmd.Parameters.AddWithValue( @ Description,Description);
string Post_Ref = dataGridView1.Rows [e.RowIndex] .Cells [ Post_Ref]。Value.ToString();
cmd.Parameters.AddWithValue( @ Post_Ref,Post_Ref);
int 借记;
bool debitHasValue = Int32 .TryParse(dataGridView1.Rows [e.RowIndex] .Cells [ 借方]。Value.ToString(), out 借记);
if (debitHasValue)
{
cmd.Parameters.AddWithValue( @ Debit,debit);
}
else
{
cmd.Parameters.AddWithValue( @ Debit,DBNull.Value);
}
int 积分;
bool CreditsHasValue = Int32 .TryParse(dataGridView1.Rows [e.RowIndex] .Cells [ Credit]。Value.ToString(), out 学分);
if (CreditsHasValue)
{
cmd.Parameters.AddWithValue( @ Credit,Credits);
}
else
{
cmd.Parameters.AddWithValue( @ Credit,DBNull.Value);
}
int 余额;
bool BalancesHasValue = Int32 .TryParse(dataGridView1.Rows [e.RowIndex] .Cells [ Balance]。Value.ToString(), out 余额);
if (BalancesHasValue)
{
cmd.Parameters.AddWithValue( @ Balance,余额);
}
else
{
cmd.Parameters.AddWithValue( @ Balance,DBNull.Value);
}
cmd.ExecuteNonQuery();
con.Close();
}
}
解决方案
多次插入的原因是你是在dataGridView1_CellValueChanged
中做的。每次单元格值更改时都会调用该事件处理程序方法。您应该使用RowLeave事件(并确保它是一个新行)。
一个或多个值没有给出的原因必需参数例外情况是,由于其中<,您需要在最后第二次为
AccountNumber
添加OleDbParameter / code> -clause并且因为Access没有命名参数 - 因此它不知道它可以再次使用AccountNumber
-parameter的第一次出现
im creating one application where user can be enter there details in datagridview data inserted successfully but when i check again it show me multiple entry has done by one data i pasted here my inserted code and one more query i have iam trying to do update also but its give me No value given for one or more required parameters exception im giving that code also
What I have tried:
inserted code :
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
account = dataGridView1.Rows[e.RowIndex].Cells["AccountNumber"].Value.ToString();
if (account == "")
{
account1 = 0;
}
else
{
account1 = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["AccountNumber"].Value.ToString());
}
if (account1 == 0)
{
string connectionString = null;
connectionString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
con.ConnectionString = connectionString;
string cmd1 = "insert into Ledger([AccountNumber],[Account],[Date],[Description],[Post_Ref],[Debit],[Credit],[Balance])values(?,?,?,?,?,?,?,?)";
OleDbCommand cmd = new OleDbCommand(cmd1, con);
con.Open();
cmd.CommandType = CommandType.Text;
int accountNumber;
bool accountHasValue = int.TryParse(dataGridView1.Rows[e.RowIndex].Cells["AccountNumber"].Value.ToString(), out accountNumber);
if (accountHasValue)
{
cmd.Parameters.AddWithValue("@AccountNumber", accountNumber);
}
else
{
cmd.Parameters.AddWithValue("@AccountNumber", DBNull.Value);
}
string accounts = dataGridView1.Rows[e.RowIndex].Cells["Account"].Value.ToString();
cmd.Parameters.AddWithValue("@Account", accounts);
DateTime datetime;
bool dateTimeHasValue = DateTime.TryParse(dataGridView1.Rows[e.RowIndex].Cells["Date"].Value.ToString(), out datetime);
if (dateTimeHasValue)
{
cmd.Parameters.AddWithValue("@Date", datetime);
}
else
{
cmd.Parameters.AddWithValue("@Date", DBNull.Value);
}
string Description = dataGridView1.Rows[e.RowIndex].Cells["Description"].Value.ToString();
cmd.Parameters.AddWithValue("@Description", Description);
string Post_Ref = dataGridView1.Rows[e.RowIndex].Cells["Post_Ref"].Value.ToString();
cmd.Parameters.AddWithValue("@Post_Ref", Post_Ref);
int debit;
bool debitHasValue = Int32.TryParse(dataGridView1.Rows[e.RowIndex].Cells["Debit"].Value.ToString(), out debit);
if (debitHasValue)
{
cmd.Parameters.AddWithValue("@Debit", debit);
}
else
{
cmd.Parameters.AddWithValue("@Debit", DBNull.Value);
}
int Credits;
bool CreditsHasValue = Int32.TryParse(dataGridView1.Rows[e.RowIndex].Cells["Credit"].Value.ToString(), out Credits);
if (CreditsHasValue)
{
cmd.Parameters.AddWithValue("@Credit", Credits);
}
else
{
cmd.Parameters.AddWithValue("@Credit", DBNull.Value);
}
int Balances;
bool BalancesHasValue = Int32.TryParse(dataGridView1.Rows[e.RowIndex].Cells["Balance"].Value.ToString(), out Balances);
if (BalancesHasValue)
{
cmd.Parameters.AddWithValue("@Balance", Balances);
}
else
{
cmd.Parameters.AddWithValue("@Balance", DBNull.Value);
}
cmd.ExecuteNonQuery();
con.Close();
}
update code :
else
{
string cmd1 = "update Ledger set [AccountNumber]=?,[Account]=?,[Date]=?,[Description]=?,[Post_Ref]=?,[Debit]=?,[Credit]=?,[Balance]=? where AccountNumber=?";
OleDbCommand cmd = new OleDbCommand(cmd1, con);
con.Open();
cmd.CommandType = CommandType.Text;
int accountNumber;
bool accountHasValue = int.TryParse(dataGridView1.Rows[e.RowIndex].Cells["AccountNumber"].Value.ToString(), out accountNumber);
if (accountHasValue)
{
cmd.Parameters.AddWithValue("@AccountNumber", accountNumber);
}
else
{
cmd.Parameters.AddWithValue("@AccountNumber", DBNull.Value);
}
string accounts = dataGridView1.Rows[e.RowIndex].Cells["Account"].Value.ToString();
cmd.Parameters.AddWithValue("@Account", accounts);
DateTime datetime;
bool dateTimeHasValue = DateTime.TryParse(dataGridView1.Rows[e.RowIndex].Cells["Date"].Value.ToString(), out datetime);
if (dateTimeHasValue)
{
cmd.Parameters.AddWithValue("@Date", datetime);
}
else
{
cmd.Parameters.AddWithValue("@Date", DBNull.Value);
}
string Description = dataGridView1.Rows[e.RowIndex].Cells["Description"].Value.ToString();
cmd.Parameters.AddWithValue("@Description", Description);
string Post_Ref = dataGridView1.Rows[e.RowIndex].Cells["Post_Ref"].Value.ToString();
cmd.Parameters.AddWithValue("@Post_Ref", Post_Ref);
int debit;
bool debitHasValue = Int32.TryParse(dataGridView1.Rows[e.RowIndex].Cells["Debit"].Value.ToString(), out debit);
if (debitHasValue)
{
cmd.Parameters.AddWithValue("@Debit", debit);
}
else
{
cmd.Parameters.AddWithValue("@Debit", DBNull.Value);
}
int Credits;
bool CreditsHasValue = Int32.TryParse(dataGridView1.Rows[e.RowIndex].Cells["Credit"].Value.ToString(), out Credits);
if (CreditsHasValue)
{
cmd.Parameters.AddWithValue("@Credit", Credits);
}
else
{
cmd.Parameters.AddWithValue("@Credit", DBNull.Value);
}
int Balances;
bool BalancesHasValue = Int32.TryParse(dataGridView1.Rows[e.RowIndex].Cells["Balance"].Value.ToString(), out Balances);
if (BalancesHasValue)
{
cmd.Parameters.AddWithValue("@Balance", Balances);
}
else
{
cmd.Parameters.AddWithValue("@Balance", DBNull.Value);
}
cmd.ExecuteNonQuery();
con.Close();
}
}
解决方案
The cause for the multiple inserts is that you're doing it indataGridView1_CellValueChanged
. That eventhandler-method is called every time a cell value has changed. You should use the RowLeave-event instead (and make sure it was a new row).
The cause for the "No value given for one or more required parameters" exception is that you need to add the OleDbParameter for theAccountNumber
a second time at the very end because of thewhere
-clause and because Access doesn't have named parameters - so it doesn't know that it could use the first occurence of theAccountNumber
-parameter again.
这篇关于在datagridview中插入了多个重复条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文