在下要用DataGridView的“增、删、改、查”的功能,但是只会绑定数据,不会设置。还请各位多多指教,在下用的数据库是Access。问题有四个,还请大侠可以静下心来,指点指点小弟,不甚感激。下面一个实例:
有一个DataGridView控件(GridView_XFXM),已经实现数据库绑定,而且已经实现功能。
问题一:怎样才可以让它实现“增、删、改、查”的功能?需要设置哪些属性和方法要实现的功能表述:在一行记录的最后有两个按钮“修改”、“删除”,点击修改后,可以修改该行记录中的字段的值。同时修改按钮变为保存,点击“保存”,可将修改后的数据保存到数据库。点击删除,可将该行记录删除。代码:
//“消费项目”绑定GridView
            string sql_xfxm_bdgv = "select * from xfxmb ";
            DataTable dt_xfxm_bd = access.FillDt(sql_xfxm_bdgv);
            GridView_XFXM.DataSource = dt_xfxm_bd;
            this.GridView_XFXM.Columns[0].HeaderCell.Value = "序号";
            this.GridView_XFXM.Columns[1].HeaderCell.Value = "推荐日期";
            this.GridView_XFXM.Columns[2].HeaderCell.Value = "消费名称";
            this.GridView_XFXM.Columns[3].HeaderCell.Value = "金额";
            this.GridView_XFXM.Columns[4].HeaderCell.Value = "操作员";
 
已经发了几张帖子,各位大侠都做了回答,但是在下愚钝还是不知道具体如何实现。
下面是“逍遥”等各位大侠给的实例,在下有点不明白。
问题二:在下用的是Access,要用“ OleDbAdapter”,但是不知道用它如何提交数据?问题三:在下不知道下面这些“增删改”的方法用在DataGridView的那里?代码实例如下:
        private DataSet ds = new DataSet();
        private SqlConnection conn = null;
        private SqlDataAdapter da = null;
        private const string DRIVER = "server=.;database=northwind;uid=sa;pwd=sa";
        private const string sql_select = "select * from region";
        数据库连接代码略
private bool BtnInsert() //此方法作用于添加
        ...{
            da.InsertCommand = conn.CreateCommand();
            da.InsertCommand.CommandText = "insert into region values(@id,@ption)";
            da.InsertCommand.Parameters.Add("@id", SqlDbType.Int, 4, "regionid");
            da.InsertCommand.Parameters.Add("@ption", SqlDbType.VarChar, 10, "regiondescription"); 问题四: 这些语句如果是"Access"数据库,应该怎样写

            int count = da.Update(ds);
            bool result = count > 0 ? true : false;
            return result;
        }
 private bool BtnDelect() //此方法作用于删除      
  ...{
            SqlParameter sp = new SqlParameter();            da.DeleteCommand = conn.CreateCommand();
            da.DeleteCommand.CommandText = "delete region where regionid=@id";
            sp = da.DeleteCommand.Parameters.Add("@id", SqlDbType.Int, 4, "regionid");
            sp.SourceVersion = DataRowVersion.Original;
            ds.Tables["table"].Rows[this.dataGridView1.CurrentRow.Index].Delete();
            int count = da.Update(ds);
            bool result = count > 0 ? true : false;
            return result;
        }
 private bool BtnUpdate() //此方法作用于修改
        ...{
            SqlParameter sp = new SqlParameter();
            da.UpdateCommand = conn.CreateCommand();
            da.UpdateCommand.CommandText = "update region set regionid=@id,regiondescription=@ption where regionid=@oldid";            da.UpdateCommand.Parameters.Add("@id", SqlDbType.Int, 4, "regionid");
            da.UpdateCommand.Parameters.Add("@ption", SqlDbType.VarChar, 10, "regiondescription");            sp = da.UpdateCommand.Parameters.Add("@oldid", SqlDbType.Int, 4, "regionid");
            sp.SourceVersion = DataRowVersion.Original;
            
            int count = da.Update(ds);
            bool result = count > 0 ? true : false;
            return result;
        }

解决方案 »

  1.   

    1,增删该查 简单的话 4个按钮 分别 执行4个操作,只要知道 主键ID 就行了,4个sql 语句 应该简单吧,难点就是 获取 datagridview里面的值(基础吧)
    2,封装好的access 类
    3,还是跟问题1 差不多, 4个按钮执行各自方法
      

  2.   

    我没试,你试试下面的方法行不行(如果保存按下,isDelete传flase,如果删除按下,isDelete传true):
            public bool Update(OleDbConnection conn, string selectSql, DataGridView gv, bool isDelete, ref string retError)
            {            try
                {
                    conn.Open();                OleDbDataAdapter da = new OleDbDataAdapter(selectSql, conn);
                    OleDbCommandBuilder cb = new OleDbCommandBuilder(da);                DataRowView rv = gv.BindingContext[gv.DataSource].Current as DataRowView;
                    if (rv == null)
                    {
                        retError = "不存在当前行";
                        return false;
                    }
                    rv.EndEdit();                DataTable dt = gv.DataSource as DataTable;                if (isDelete)
                        rv.Row.Delete();                da.Update(new DataRow[] { rv.Row });
                    dt.AcceptChanges();                return true;
                }
                catch (System.Exception eUpdate)
                {
                    retError = eUpdate.Message;
                    return false;
                }
                finally
                {
                    if (conn.State != ConnectionState.Closed)
                        conn.Close();
                }
            }
    如果行的话,需要把
    OleDbDataAdapter da = new OleDbDataAdapter(selectSql, conn);
    OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
    这两句提取到函数之外,以提高性能
      

  3.   

    楼主,要好好利用网上的资源啦。。
    http://www.google.com.hk/search?hl=zh-CN&source=hp&biw=1280&bih=811&q=datagridview+%E5%A2%9E%E5%88%A0%E6%94%B9%E6%9F%A5&aq=1&aqi=g-g1g1g-m2&aql=&oq=datagridview+%E5%A2%9E%E5%88%A0%E6%94%B9&gs_rfai=
    这个应该是最基本的。。
      

  4.   

    现在的问题关键是:怎样在DataGridView的每一行中都加上三个按钮,“修改”、“保存”、“删除”?网上搜了,但是都是代码,没说怎样设置啊?
    愁。
      

  5.   

    GRIDVIEW控件中有个属性可以设置AUTOGENERATEDELETEBUTTON设置成TURE
      

  6.   

    设计时对DataGirdView添加非绑定列
    ColumnType属性改为DataGridViewButtonColumn
    UseColumnTextForButtonValue属性改为true
    Text属性改为"修改"
      

  7.   


    具体怎样对“DataGirdView添加非绑定列”,您能说说吗?在下从MSDN上没有查到啊?
      

  8.   

    在设计窗口单击DataGridView控件在右键菜单上选择编辑列在弹出窗口单击添加,弹出窗口选择未绑定列在右面的属性窗口修改需要修改的属性由于你数据绑定是用代码实现的,DataGridView在设计时创建有许多诡异性,所以你还是应该去寻找代码实现的方法
    下面说一说你这个需求潜在的隐患:你的DataGirdView在未来还可能存在添加问题,到时三个按钮无法从添加行消失,可能不是你的需要,另外,新增行的保存该由谁负责引发?由于修改按钮的存在,还存在控制行的只读状态问题,由于你无法控制用户的焦点如何转移,这些问题将来也非常复杂和难以处理,如果大量的行存在已修改,用户未点击保存,将给用户带来非常大的操作混乱和信息混乱,使整体程序数据的有效性难以控制.如果要把修改和保存改为同一个按钮,那只能用绑定列,将带来DataAdapter无法正确处理修改过的行,也即带来不必要的数据库操作.或干脆放弃使用DataAdapter更新的便利性.WinForm的运行机制与BS结构不同,把这种BS的处理方式引入到WinForm中,不是好的解决方案WinForm中对于DataGirdView的处理方法,应该是由一组统一的控制按钮,结合数据绑定等方案,解决数据的增,删,改等问题,而不是为每行数据各设置一组按钮.或者处理DataTable的数据变化事件,根据变化立即操作数据库(即不存在任何增\删\改按钮,只要用户修改了单元格的值,就立即将数据更新到数据库中,类似于早期的ADO或DAO绑定)
      

  9.   

    DataGridView它本身都带有带有增删改的功能,只要调用就可以了,只不过我用的SQL,不知道Access是不是一样,按理来说是一样的吧
      

  10.   


    在下对“DataGridView”不熟悉,不清楚在哪里?
      

  11.   


    您的第一种说法是不是:在GridView控件的下面用三个按钮,分别是“修改”“保存”“删除”。
    操作时,选择一行,然后点击修改则该行进入编辑状态。点击保存则保存修改,点击删除则删除该行。您的第二种方法有点缺陷“处理DataTable的数据变化事件”,如果是修改可以直接修改数据库,但是如果是删除本行记录该怎么处理?