这是我的代码,我想实现在datagridview编辑数据时能自动保存新增和已修改的数据到数据库,我用的是CurrentCellChanged事件。但这个代码一启动就报错!说是this.dataGridView1.CurrentRow为NULL,于是我在绑定数据前取消事件绑定,但还是不起作用!!!有没有什么好的办法? public partial class CPModel : Form
{
private DataSet myDS;
private OleDbConnection conn=null;
private OleDbDataAdapter da = null; private void binddata()
{
conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0.;Data Source=F:/CPDB.mdb");
conn.Open();
string sql = "select * from OriginData";
da = new OleDbDataAdapter(sql, conn);
myDS = new DataSet();
da.Fill(myDS,"OD");
this.dataGridView1.CurrentCellChanged -= new EventHandler(dataGridView1_CurrentCellChanged);
this.dataGridView1.DataSource = myDS.Tables["OD"].DefaultView;
this.dataGridView1.CurrentCellChanged += new EventHandler(dataGridView1_CurrentCellChanged);
this.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
this.dataGridView1.RowHeadersVisible = false;
}
public CPModel()
{
InitializeComponent();
binddata();
} private void dataGridView1_CurrentCellChanged(object sender, EventArgs e)
{
if (this.dataGridView1.CurrentRow.IsNewRow)
{
da.InsertCommand = conn.CreateCommand();
da.InsertCommand.CommandText = "insert into OriginData values(@Phases,@SpCode)";
da.InsertCommand.Parameters.Add("@Phases", OleDbType.VarChar, 10, "Phases");
da.InsertCommand.Parameters.Add("@SpCode", OleDbType.VarChar, 10, "SpCode");
int count = da.Update(myDS, "OD");
bool result = count > 0 ? true : false;
}
else
{
OleDbParameter sp = new OleDbParameter();
da.UpdateCommand = conn.CreateCommand();
da.UpdateCommand.CommandText = "update OriginData set Phases=@Phases,SpCode=@SpCode where Phases=@oldid";
da.UpdateCommand.Parameters.Add("@Phases", OleDbType.VarChar, 10, "Phases");
da.UpdateCommand.Parameters.Add("@SpCode", OleDbType.VarChar, 10, "SpCode");
sp = da.UpdateCommand.Parameters.Add("@oldid", OleDbType.VarChar, 10, "Phases");
sp.SourceVersion = DataRowVersion.Original;
int count = da.Update(myDS, "OD");
bool result = count > 0 ? true : false;
}
}
}
}
{
private DataSet myDS;
private OleDbConnection conn=null;
private OleDbDataAdapter da = null; private void binddata()
{
conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0.;Data Source=F:/CPDB.mdb");
conn.Open();
string sql = "select * from OriginData";
da = new OleDbDataAdapter(sql, conn);
myDS = new DataSet();
da.Fill(myDS,"OD");
this.dataGridView1.CurrentCellChanged -= new EventHandler(dataGridView1_CurrentCellChanged);
this.dataGridView1.DataSource = myDS.Tables["OD"].DefaultView;
this.dataGridView1.CurrentCellChanged += new EventHandler(dataGridView1_CurrentCellChanged);
this.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
this.dataGridView1.RowHeadersVisible = false;
}
public CPModel()
{
InitializeComponent();
binddata();
} private void dataGridView1_CurrentCellChanged(object sender, EventArgs e)
{
if (this.dataGridView1.CurrentRow.IsNewRow)
{
da.InsertCommand = conn.CreateCommand();
da.InsertCommand.CommandText = "insert into OriginData values(@Phases,@SpCode)";
da.InsertCommand.Parameters.Add("@Phases", OleDbType.VarChar, 10, "Phases");
da.InsertCommand.Parameters.Add("@SpCode", OleDbType.VarChar, 10, "SpCode");
int count = da.Update(myDS, "OD");
bool result = count > 0 ? true : false;
}
else
{
OleDbParameter sp = new OleDbParameter();
da.UpdateCommand = conn.CreateCommand();
da.UpdateCommand.CommandText = "update OriginData set Phases=@Phases,SpCode=@SpCode where Phases=@oldid";
da.UpdateCommand.Parameters.Add("@Phases", OleDbType.VarChar, 10, "Phases");
da.UpdateCommand.Parameters.Add("@SpCode", OleDbType.VarChar, 10, "SpCode");
sp = da.UpdateCommand.Parameters.Add("@oldid", OleDbType.VarChar, 10, "Phases");
sp.SourceVersion = DataRowVersion.Original;
int count = da.Update(myDS, "OD");
bool result = count > 0 ? true : false;
}
}
}
}
解决方案 »
- 求助 跨网段访问数据
- 谁能帮我看看我的程序哪里有问题?菜鸟,还请帮忙
- BingingSource,更改textbox的值不会触发bindsource.CurrentItemChanged事件?
- 大家快来帮帮忙。。。。。
- 修改数据库报错..........................................
- 有关串口的关闭
- 在线求助!UltraWinGrid的Row插入问题
- 要让文本框中只能输入数字要怎么做?
- 关于TCPClient, 怎么能Stream.Read一次读大于15000 bytes 的数据
- 急呀,一个关于窗体继承的问题 在线等待
- 跨服务器文件读取问题
- C#,string,字体
if (this.dataGridView1.CurrentRow == null)
return;
this.dataGridView1.CurrentCellChanged += new EventHandler(dataGridView1_CurrentCellChanged);你把上面这句去掉,然后看看还有没有异常,如果有异常,证明之后绑定过程重新注册了事件,如果没有,则可能就是绑定后注册事件后,什么地方又触发了此事件。