数据集(DataSet)通过ObjectDataSource与GridView连动(1)

       数据库的操作总是很烦锁,于是JAVA里面出来Hibernate,使我们从烦锁的数据库操作中解放出来了,于是有人提出了要将NHibernate用到NET中来,我试了一下,感觉并不是很好,特别是配置文件不好写,其实面对一般的数据库操作,我们只要用数据集(type DataSet)就可以搞定了,通过ObjectDataSource还可以轻松地与GridView对接起来,实示显示,删除,修改的功能.

       我们使用的数据库是MSSQL2000,为了实验效果更加明显,我们新建一个数据库test,然后再分别建两个表table1,table2,SQL脚本如下:

create table Table1 (

   id                   int                  not null,

   username             nvarchar(30)         not null,

   password             nvarchar(30)         not null,

   email                nvarchar(30)         null,

   address              nvarchar(30)         null,

   constraint PK_TABLE1 primary key (id)

)

go

/*==============================================================*/

/* Table: Table2                                                */

/*==============================================================*/

create table Table2 (

   id                   int                  identity,

   username             nvarchar(30)         not null,

   password             nvarchar(30)         not null,

   email                nvarchar(30)         null,

   address              nvarchar(30)         null,

   constraint PK_TABLE2 primary key (id)

)

Go

//Table2会在文章2中使用到.

       表建完之后,我们随便加入一些数据,以便测试用.

       打开VS2005,新建一个网站,命名为DataSetTest,右击网站项目,添加新项,选择数据集”,命名为”DataSet1.xsd”,确定之后它会出现一个向导,我们先建一个新的数据库连接,指向数据库Test, 如图:

之后按着它的提示一步步来,命令类型选择使用SQL命令,然后下一步,窗口输入SQL命令输入命令:

SELECT Table1.*

FROM Table1

再点击左下角的高级选项,勾选每一项,第二,第三项不要选(这些选项后面的示例会讲到),然后再下一步,使用默认的选项不变.它会自动生成添加,删除,修改的方法,完成之后,我们按下F6, 让其生成一个所需的类.OK!

       新建一个页面table1.aspx,从工具栏里面拖动一个GridView和一个ObjectDataSource到页面上,点击ObjectDataSource上的三角小标志,点配置数据源,选择业务对象,点击下拉框,选中唯一的一个类

一直点击下一步,全部使用默认的方法,直至完成.然后将GridView的数据源指定为ObjectDataSource1,F5,我们就可以看到GridViewtable里的数据全读出来了.

之后再在GridView上面添加删除,编辑列,F5运行后,我们会发现点编辑更新后会出错,这到底是什么原因呢?报错提示如下:

ObjectDataSource“ObjectDataSource 1” 未能找到带参数的非泛型方法“Update”: username, password, email, address, original_id

 

也就是说我们的方法跟它所传我的参数并不相配,好的,我们看一下ObjectDataSource的代码

            <UpdateParameters>

                <asp:Parameter Name="id" Type="Int32" />

                <asp:Parameter Name="username" Type="String" />

                <asp:Parameter Name="password" Type="String" />

                <asp:Parameter Name="email" Type="String" />

                <asp:Parameter Name="address" Type="String" />

                <asp:Parameter Name="Original_id" Type="Int32" />

            </UpdateParameters>

ObjectDataSource的代码,id也是在更新之列的,一般情况下我们的ID是不需要更新(99%),那我们该怎么办呢,我们用XML编辑器打开DataSet1.xsd,找到更新语句

<CommandText>UPDATE [Table1] SET [id] = @id, [username] = @username, [password] = @password, [email] = @email, [address] = @address WHERE (([id] = @Original_id))</CommandText>

[id] = @id,删掉并删掉对应的@id语句

 

 <Parameter AllowDbNull="False" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@id" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="id" SourceColumnNullMapping="False" SourceVersion="Current">

                      </Parameter>

我们重新生成一下(F6),然后点击ObjectDataSouce中的刷新框架,让它重新产生一些代码.

之后按F5,我们可以发现再编辑已经没问题了

解决方法2,顺着我们的思路,我们可以让ID可以更新(那个更新的语句不做修改,跟原来的一样)

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id"

            DataSourceID="ObjectDataSource1">

            <Columns>

                <asp:BoundField DataField="id" HeaderText="id" ReadOnly="True" SortExpression="id" />

 

GridView代码里的

ReadOnly="True"去掉,这样的话同样可以达到更新,删除的目的,这就对应了我们现实中的主键是自动生成与手动指定两种情况, 在文章2里面将有示例说明一下有并发控制的DataSet如何跟GridView一起连动.夜深了,先休息了,呵呵.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值