在下要用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;
}
有一个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;
}
2,封装好的access 类
3,还是跟问题1 差不多, 4个按钮执行各自方法
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);
这两句提取到函数之外,以提高性能
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=
这个应该是最基本的。。
愁。
ColumnType属性改为DataGridViewButtonColumn
UseColumnTextForButtonValue属性改为true
Text属性改为"修改"
具体怎样对“DataGirdView添加非绑定列”,您能说说吗?在下从MSDN上没有查到啊?
下面说一说你这个需求潜在的隐患:你的DataGirdView在未来还可能存在添加问题,到时三个按钮无法从添加行消失,可能不是你的需要,另外,新增行的保存该由谁负责引发?由于修改按钮的存在,还存在控制行的只读状态问题,由于你无法控制用户的焦点如何转移,这些问题将来也非常复杂和难以处理,如果大量的行存在已修改,用户未点击保存,将给用户带来非常大的操作混乱和信息混乱,使整体程序数据的有效性难以控制.如果要把修改和保存改为同一个按钮,那只能用绑定列,将带来DataAdapter无法正确处理修改过的行,也即带来不必要的数据库操作.或干脆放弃使用DataAdapter更新的便利性.WinForm的运行机制与BS结构不同,把这种BS的处理方式引入到WinForm中,不是好的解决方案WinForm中对于DataGirdView的处理方法,应该是由一组统一的控制按钮,结合数据绑定等方案,解决数据的增,删,改等问题,而不是为每行数据各设置一组按钮.或者处理DataTable的数据变化事件,根据变化立即操作数据库(即不存在任何增\删\改按钮,只要用户修改了单元格的值,就立即将数据更新到数据库中,类似于早期的ADO或DAO绑定)
在下对“DataGridView”不熟悉,不清楚在哪里?
您的第一种说法是不是:在GridView控件的下面用三个按钮,分别是“修改”“保存”“删除”。
操作时,选择一行,然后点击修改则该行进入编辑状态。点击保存则保存修改,点击删除则删除该行。您的第二种方法有点缺陷“处理DataTable的数据变化事件”,如果是修改可以直接修改数据库,但是如果是删除本行记录该怎么处理?