高人指点一下,删除往往删除的不是DataGrid中的选定行,而且第一行和第二行删不掉
修改我想直接在DataGrid表中修改,用DataAdaper.Update()方法修改,可是实现不了!
请高人给指点一下 private void Form1_Load(object sender, System.EventArgs e)
{
this.MaximizeBox=false;
OracleConnection conn=new OracleConnection(strConn);
conn.Open();
OracleDataAdapter da=new OracleDataAdapter("select * from AddressBook",conn);
DataSet ds=new DataSet();
da.Fill(ds);
DataTable dt=ds.Tables[0];
dataGrid1.DataSource=dt;
conn.Close();
} private void btnModify_Click(object sender, System.EventArgs e)
{
try
{
OracleConnection conn=new OracleConnection(strConn);
conn.Open();
OracleDataAdapter da=new OracleDataAdapter("select * from AddressBook",conn);
OracleCommandBuilder cb=new OracleCommandBuilder(da);
da.UpdateCommand=cb.GetUpdateCommand;
DataSet ds=new DataSet();
da.Fill(ds);
DataTable dt=ds.Tables[0];
da.Update(ds);
conn.Close();
Form1_Load(sender,e);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void btnDelete_Click(object sender, System.EventArgs e)
{
try
{
OracleConnection conn=new OracleConnection(strConn);
conn.Open();
OracleCommand cmd=new OracleCommand("delete from AddressBook where No='"+(dataGrid1.CurrentRowIndex+1)+"'",conn);
cmd.ExecuteNonQuery();
conn.Close();
Form1_Load(sender,e);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
} }
修改我想直接在DataGrid表中修改,用DataAdaper.Update()方法修改,可是实现不了!
请高人给指点一下 private void Form1_Load(object sender, System.EventArgs e)
{
this.MaximizeBox=false;
OracleConnection conn=new OracleConnection(strConn);
conn.Open();
OracleDataAdapter da=new OracleDataAdapter("select * from AddressBook",conn);
DataSet ds=new DataSet();
da.Fill(ds);
DataTable dt=ds.Tables[0];
dataGrid1.DataSource=dt;
conn.Close();
} private void btnModify_Click(object sender, System.EventArgs e)
{
try
{
OracleConnection conn=new OracleConnection(strConn);
conn.Open();
OracleDataAdapter da=new OracleDataAdapter("select * from AddressBook",conn);
OracleCommandBuilder cb=new OracleCommandBuilder(da);
da.UpdateCommand=cb.GetUpdateCommand;
DataSet ds=new DataSet();
da.Fill(ds);
DataTable dt=ds.Tables[0];
da.Update(ds);
conn.Close();
Form1_Load(sender,e);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void btnDelete_Click(object sender, System.EventArgs e)
{
try
{
OracleConnection conn=new OracleConnection(strConn);
conn.Open();
OracleCommand cmd=new OracleCommand("delete from AddressBook where No='"+(dataGrid1.CurrentRowIndex+1)+"'",conn);
cmd.ExecuteNonQuery();
conn.Close();
Form1_Load(sender,e);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
} }
你可以根据crrentrowindex来获取内存中的表中的数据
dt=(DataTable)dataGrid1.datasource
dr.rows[datagrid1.currentrowindex]["no"] 来取OracleDataAdapter 的其他几个command也要设
dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[2].Value.ToString();
conn.Open();
OracleDataAdapter da=new OracleDataAdapter("select * from AddressBook",conn);
OracleCommandBuilder cb=new OracleCommandBuilder(da);
da.UpdateCommand=cb.GetUpdateCommand;
DataSet ds=new DataSet();
da.Fill(ds);
DataTable dt=ds.Tables[0];
da.Update(ds);
conn.Close();
Form1_Load(sender,e); 在这个里面,当我们去更新一个表的时候,我们要知道一个映射关系,就是说我们要把更新一个字段,那么我们就要去指定它。
所以说上面的部分中,你是直接的去update一个ds,这样的话,是做不到的。你要去指定你要更新的字段。
当然你如果是使用了MS提供的邦定的wizard,那么你可以直接去使用你的邦定过的datagrid中的update()方法去更新你的datasource.
private void btnModify_Click(object sender, System.EventArgs e)
{
try
{
OracleConnection conn=new OracleConnection(strConn);
conn.Open();
OracleDataAdapter da=new OracleDataAdapter("select * from AddressBook",conn);
DataSet ds=new DataSet();
da.Fill(ds);
DataTable dt=ds.Tables[0];
OracleCommand cmdMod=new OracleCommand("update AddressBook set name='"+dt.Rows[dataGrid1.CurrentRowIndex]["name"]+"',englishname='"+dt.Rows[dataGrid1.CurrentRowIndex]["englishname"]+"',region='"+dt.Rows[dataGrid1.CurrentRowIndex]["region"]+"',"+
"personno='"+dt.Rows[dataGrid1.CurrentRowIndex]["personno"]+"',address='"+dt.Rows[dataGrid1.CurrentRowIndex]["address"]+"',telephone='"+dt.Rows[dataGrid1.CurrentRowIndex]["telephone"]+"',mobile='"+dt.Rows[dataGrid1.CurrentRowIndex]["mobile"]+"',"+
"email='"+dt.Rows[dataGrid1.CurrentRowIndex]["email"]+"',re='"+dt.Rows[dataGrid1.CurrentRowIndex]["re"]+"' where No='"+(dt.Rows[dataGrid1.CurrentRowIndex]["No"])+"'",conn);
cmdMod.ExecuteNonQuery();
conn.Close();
Form1_Load(sender,e);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
不过在这个时候你要好好看看你的SQL有没有问题。