点击DataGridView选中一行记录,文本框显示出行中的数据(这步我已实现)修改文本框中的数据,在点击修改按钮,DataGridView中被选中行的数据修改,数据库更新,修改后的数据依然被选中(这里不会写)

解决方案 »

  1.   

    定义一个Sqlcommand对象,指定更改的Update语句,然后执行cmd对象的ExecquteNoquery()方法即可。
      

  2.   

    我试过你说的方法,数据库里面的值是更新了,但DataGridView显示的还是没修改之前的数据
      

  3.   

    private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    DataGrid1.EditItemIndex=e.Item.ItemIndex; Get_Rows_Count();
    Get_DataReader();
    }
      

  4.   

    这个可行,还有SqlCommandBulider也可以吧
      

  5.   

    修改结束加上这句
    this.Validate();
      

  6.   

    这是我做的一个程序里的,你看看有用没,我加了注释了.//这是datagridview的鼠标点击事件.
    private void 电子钱包dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
            {
    //获得datagridview单元格里的数据
                try
                {
                    日期dateTimePicker.Value = (DateTime)电子钱包dataGridView.Rows[e.RowIndex].Cells[1].Value;
                    钱包所剩钱TextBox.Text = 电子钱包dataGridView.Rows[e.RowIndex].Cells[2].Value.ToString();
                    钱柜所剩钱TextBox.Text = 电子钱包dataGridView.Rows[e.RowIndex].Cells[3].Value.ToString();
                    当天使用数TextBox.Text = 电子钱包dataGridView.Rows[e.RowIndex].Cells[4].Value.ToString();
                    使用方法TextBox.Text = 电子钱包dataGridView.Rows[e.RowIndex].Cells[5].Value.ToString();
                }
                catch
                    {
                    }
           }//修改按钮点击事件
    private void 修改button_Click(object sender, EventArgs e)
            {
                try
                {
    //获得你选中的行数
                    int a;
                    a = (int)电子钱包dataGridView.CurrentCell.RowIndex;
    //加数据
                    cnn.Open();
                    dataset1.Tables["电子钱包"].Rows[a]["日期"] = 日期dateTimePicker.Value;
                    dataset1.Tables["电子钱包"].Rows[a]["钱包所剩钱"] = 钱包所剩钱TextBox.Text.Trim();
                    dataset1.Tables["电子钱包"].Rows[a]["钱柜所剩钱"] = 钱柜所剩钱TextBox.Text.Trim();
                    dataset1.Tables["电子钱包"].Rows[a]["当天使用数"] = 当天使用数TextBox.Text.Trim();
                    dataset1.Tables["电子钱包"].Rows[a]["使用方法"] = 使用方法TextBox.Text.Trim();
                    dataset1.AcceptChanges();
                    myAccept.Update(dataset1, "电子钱包");
                    cnn.Close();
                    MessageBox.Show("修改成功!");
                }
                catch
                {
                    MessageBox.Show("已有相同的记录!");
                }   
            }
      

  7.   

    定义一个Sqlcommand对象,指定更改的Update语句,然后执行cmd对象的ExecquteNoquery()方法即可。 你再重新加载数据到 GRIDVIEW 里就可以了。你现在是看到的是没修改前的是因为你修改了以后没重新绑定。
      

  8.   

    上面的方法已经实现了更新
    没显示数据把grideview要重新绑定一下,
      

  9.   

    如果你不重新绑定他应该还是定位在当前行,
    如果不是那就硬行搜索定位:dgv.CurrentCell 赋值选中你当前行的某个单元格
      

  10.   


    private void Form1_Load(object sender, EventArgs e)
            {
                //dataGridView1.AutoGenerateColumns = false;
                conn = new OracleConnection(Source);
                conn.Open();
                //OracleDataAdapter oda = new OracleDataAdapter();            oda.UpdateCommand = new OracleCommand("update tb set serial_number = :sn ,next_station = :ns where rowid = :rid", conn);            
                oda.UpdateCommand.Parameters.Add("rid", OracleType.VarChar, 30).SourceColumn = "ROWID";
                oda.UpdateCommand.Parameters.Add("sn", OracleType.VarChar, 30).SourceColumn = "SERIAL_NUMBER";
                oda.UpdateCommand.Parameters.Add("ns", OracleType.VarChar, 40).SourceColumn = "NEXT_STATION";            oda.DeleteCommand = new OracleCommand("delete tb  where rowid = :rid", conn);
                oda.DeleteCommand.Parameters.Add("rid", OracleType.VarChar).SourceColumn = "ROWID";            oda.InsertCommand = new OracleCommand("insert into tb(serial_number,next_station) values(:sn , :ns )", conn);
                oda.InsertCommand.Parameters.Add("sn", OracleType.VarChar).SourceColumn = "serial_number";
                oda.InsertCommand.Parameters.Add("ns", OracleType.VarChar).SourceColumn = "next_station";        }
            private void select_Click(object sender, EventArgs e)
            {
                try
                {
                    ds.Clear();
                    string sql = "select rowid,serial_number,next_station from tb where serial_number like :sn";
                    oda.SelectCommand = new OracleCommand(sql, conn);
                    oda.SelectCommand.Parameters.Add("sn", OracleType.VarChar).Value = tb_SN.Text + "%";
                    oda.Fill(ds);
                    dataGridView1.DataSource = null;
                    dataGridView1.DataSource = ds.Tables[0];
                }            catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    //string path = "";
                    //StreamWriter swriter = new StreamWriter();
                }
            }        private void update_Click(object sender, EventArgs e)
            {
                this.Validate();
                dataGridView1.EndEdit();
                oda.Update(ds.Tables[0]);        }
      

  11.   


    不用ExecquteNoquery(),还有其它方法吗?
      

  12.   

    我觉得你可以找一个Listbox过度一下。
      

  13.   

    你要的效果是不是 当前操作的哪一行在修改完后 仍然选择的是哪一行呀如果是的话 代码就是这样的  int rowIndex;  //定义一个变量
            /// 在行单击事件中写这么一句获取单击时选择的行号
            private void dgvTemplate_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                rowIndex = e.RowIndex;
            }
           修改按钮的单击事件下写
            dgvTemplate.Rows[rowIndex].Selected = true;  //刷新数据源后写这么一句话就ok