在datagridview中复制多行插入和更新 [英] Duplicate multiple row insert and update in datagridview

查看:64
本文介绍了在datagridview中复制多行插入和更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 datagridview中插入并更新数据但它在<中插入了多个重复行 / span>表同时我更新了一行它更新了所有行实际上我不理解其中 i完成错误即时提供我的插入代码和更新代码如果 可能给我修改代码
插入我编写的代码:dataGridView1_RowLeave event 和更新的代码我写的:dataGridView1_CellValueChanged





我尝试过:



插入代码:



< pre lang =c#> private void dataGridView1_RowLeave( object sender,DataGridViewCellEventArgs e)
{
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();

}





更新代码:



  private   void  dataGridView1_CellValueChanged( object  sender,DataGridViewCellEventArgs e)
{
string connectionString = ;
connectionString = ConfigurationManager.ConnectionStrings [ AccessConnectionString]。ConnectionString;
con.ConnectionString = connectionString;



string cmd1 = update Ledger set [AccountNumber] = @ AccountNumber,[Account] = @ Account,[Date] = @ Date,[Description] = @ Description,[Post_Ref] = @ Post_Ref,[Debit] = @Debit,[Credit] = @ Credit,[Balance] = @ Balance其中AccountNumber = @ 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();

}

解决方案

也许你可以使用:

  if (dataGridView1.IsCurrentRowDirty)
{
// < span class =code-comment>保存...
}


你的RowLeave方法中的


im insert and update data in datagridview but it inserted multiple duplicate rows in table at same time when i updated one row it updated all row actually im not understanding where i done mistake im providing you my insert code and update code if it is possible give me modify code 
insert code i written : dataGridView1_RowLeave event and Updated Code i written : dataGridView1_CellValueChanged 



What I have tried:

insert code:

private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
      {
          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 :

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            string connectionString = null;
            connectionString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
            con.ConnectionString = connectionString;



            string cmd1 = "update Ledger set [AccountNumber]=@AccountNumber,[Account]=@Account,[Date]=@Date,[Description]=@Description,[Post_Ref]=@Post_Ref,[Debit]=@Debit,[Credit]=@Credit,[Balance]=@Balance where AccountNumber=@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();

        }

解决方案

Maybe you can use:

if (dataGridView1.IsCurrentRowDirty)
{
   // Save ...
}


in your RowLeave method.


这篇关于在datagridview中复制多行插入和更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆