vs2008产生的数据库类应用(adaper,dataset,bindsource,navigator)--写给像我一样的菜鸟

huangzhiyu2004 2010-05-23 10:08:28
刚学.net对于vs2008导入的数据源刚开始我不知道怎么用,现在有几个经验分享一下,免得别人同样走我的弯路(我用的是c#语言)
(1)关于dataset和adapter的说明,我觉得一下我搜索的得到的话比较好:
DataAdapter(即 数据适配器)对象是一种用来充当DataSet对象与实际数据源之间桥梁的对象。DataSet对象是一个非连接的对象,它与数据源无关。而 DataAdapter则正好负责填充它并把它的数据提交给一个特定的数据源,它与DataSet配合使用,可以执行新增、查询、修改和删除等多种操作。

DataAdapter 对象是一个双向通道,用来把数据从数据源中读到一个内存表中,以及把内存中的数据写回到一个数据源中。两种情况下使用的数据源可能相同,也可能不相同。而 这两种操作分别称作填充(FILL)和更新(UPDATE)。
(2)关于datagridview他是一个视图一样的东西,在vs2008中它通过BindingSource这个类与dataset进行绑定,只要修改了dataset也就修改了datagridview,反之亦然
(3)下面就介绍如何在vs2008中,通过一个参数来得到一个datatable然后利用datagridview显示出来,vs2008默认情况下生成的adapter是所有没有条件的查询。首先给datagrideview指定一个数据源,此时,datagridview并没有被填充,要想按照给定条件填充,必须给对应的adapter添加一个能够带参数的查询,按如下步骤操作:

(a)显示出数据源相,在需要添加查询的表上右键,点击“使用设计器编辑数据集”,然后在对应的数据表的adapter下,右键,添加查询,然后在需要的参数上写上?,就像下面的样子:
SELECT personID,权限
FROM LogIn
WHERE (personID = ?) AND (密码 = ?)
(b)选择get还是fill,get就是返回一个数据表,fill是就是填充一个数据表,我选择的是get,然后vs2008就会在当前的adapter类下自动添加一个函数就是你自己定义的Get**(string sUserName,string sPassWord)他返回一个数据表
(c)在需要显示出datagridview表的地方,用返回的datatable填充,就像我的代码一样:
this.personInforTableAdapter.FillByPersonID(this.evelueDBDataSet.personInfor, sTemp);//sTemp是FillByPersonID查询所需要的参数,这就是带参数查询。
这个代码是里哟娜adapter的函数FillByPersonID来填充personInfor表,因为我已经把persoInfor表绑定到datagridview中了,所以,上面就可以在datagridview中按照FillByPersonID得到的查询结果来填充datagridview了

(4)下面说一下,vs2008自动添加的导航栏的问题:
我想对添加记录的按钮响应消息,就是说,我不想调用系统默认的添加函数,这是因为我要控制主键,让主键值按照我自己的规则进行添加,我发现直接加入click消息后,即使直接退出click函数,还是调用添加函数,通过一天的摸索,我发现只要把对应的Navigator的项目去掉,再在按钮的click消息中写入自己的函数,就行了,一般情况下,这是在form的designer.cs中,比如我想对删除按钮进行自己的消息响应,我在designer.cs中,把下面的行引掉:
//this.personInforBindingNavigator.DeleteItem = this.bindingNavigatorDeleteItem;
再在对应delete的click消息函数中写下自己的代码就行了,我自己的代码:
private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
{

if (iPopedom <= 0)//我自己设定的权限变量
{
MessageBox.Show("您的权限不够,不能删除");
//((DataGridViewRowCancelEventArgs)e).Cancel = true;
return;
}
//得到选择的行
DataGridViewSelectedRowCollection curSelectRows= this.personInforDataGridView.SelectedRows;
if(curSelectRows==null)
{
return;
}
if(curSelectRows.Count<=0)
{
return;
}
//get the select index
if (MessageBox.Show("您真的要删除此条记录吗?", "提示", MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.No)
{
//((DataGridViewRowCancelEventArgs)e).Cancel= true;
return;
}
_bChanged = true;
//在datagridview中删除行,因为绑定,数据表中也删除了,但是这时数据库还没有更新,如果想更新,调用vs2008自动添加的save按钮的函数
for (int j = 0; j < curSelectRows.Count; j++)
{
DataGridViewRow curRow = curSelectRows[j];
this.personInforDataGridView.Rows.Remove(curRow);
}

}

我语言表达可能有问题,不过以上是我花了近两天得到的东西,希望对别人有用!针对这里的问题可以email:huangzhiyu2004@163.com
...全文
362 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
APP开发王 2010-06-09
  • 打赏
  • 举报
回复

友情帮顶下!顺便学习学习!
kaixinyixiao1990 2010-06-02
  • 打赏
  • 举报
回复
教你一下好了,去看看ADO.NET这本书,里面讲的很全,也很详细,看了你会豁然开朗的!
wuyq11 2010-05-23
  • 打赏
  • 举报
回复
数据库操作多参数化
wl_ldy 2010-05-23
  • 打赏
  • 举报
回复
支持一下。。。

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧