完成这些以后,就来完成表示层了: 新建一个web窗体,取名为Default.aspx. 拖动一个GridView到default.aspx页面中,用来显示所有的记录,在属性窗口中,把"允许选中行"复选上,表示,当我们选中某一行时,作相应的操作,这里的操作就是指FormView中显示详细的记录.
... <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" Style="font-size: 9pt; font-family: 'Courier New'; text-decoration: none" DataSourceID="ObjectDataSource1" AutoGenerateEditButton="True" AutoGenerateDeleteButton="True" DataKeyNames="id" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"> <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <RowStyle BackColor="#FFFBD6" ForeColor="#333333" /> <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /> <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /> <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <AlternatingRowStyle BackColor="White" /> <!--这里就是允许选中行--> <Columns> <asp:CommandField ShowSelectButton="True" SelectText="Detail"/> </Columns> </asp:GridView>
这里需要书写代码了,当然,你也可以用向导完成,这段代码用来填充GridView,注意DataSourceID和DataKeyNames属性,DatakeyNames属性一般是表的主键
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="Blog.Entity.LinksEntity" TypeName="Blog.DAL.Links" SelectMethod="getList" UpdateMethod="updateLinks" OnUpdated="ObjectDataSource1_Updated" DeleteMethod="deleteLinks" InsertMethod="insertLinks" ></asp:ObjectDataSource>
ID属性就不说了,上面的GridView的DataSourceID属性值就是这里的ID属性,DataObjectTypeName是指"用于更新、插入或删除数据操作中的参数,而不是从数据绑定控件传递个别的值(从MSDN上看的)",具体什么意思呢?就是表示在UpdateMethod或Deletemethod事件中,传递给相关方法的参数不是一个控件的值,而是一个Blog.Entity.LinksEntity类型的值.回到DAL层就明白了吧.
public void updateLinks(Blog.Entity.LinksEntity obj) { ......... } public void deleteLinks(Entity.LinksEntity obj) { ...... } public void insertLinks(Entity.LinksEntity obj) { ..... }
注意参数,如果你不设定这里的DataObjectTypeName的话,在进行更新操作时会失败,TypeName是ObjectDataSource控件的另一个重要属性,意思是你这里的数据取自于哪一个类,这里我指定的是Blog.Dal.Links类
namespace Blog.DAL { public class Links .....
与这里是对应的,如果写错的话,是会报错的.在这里执行一下会看到:

表明绑定成功了,你可以试一下选取/编辑/删除操作 再来拖动一个FormView控件
<asp:FormView ID="FormView1" runat="server" BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4" DataSourceID="ObjectDataSource2" GridLines="Both" Style="font-size: 9pt; font-family: 'Courier New'; text-decoration: none" Width="348px" DataKeyNames="id"> <FooterStyle BackColor="#99CCCC" ForeColor="#003399" /> <EditRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" /> <EditItemTemplate> ... </EditItemTemplate> <RowStyle BackColor="White" ForeColor="#003399" /> <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" /> <InsertItemTemplate> ... </InsertItemTemplate> <ItemTemplate> ..... </ItemTemplate> <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" /> </asp:FormView>
省略号码是自动生成的模板,代码较长,就没有帖上来了 注意FormView的DataSourceID属性和DataKeyNames属性,再来看ObjectDataSource2的代码
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server" DataObjectTypeName="Blog.Entity.LinksEntity" DeleteMethod="deleteLinks" InsertMethod="insertLinks" SelectMethod="getDetail" TypeName="Blog.DAL.Links" UpdateMethod="updateLinks"> <SelectParameters> <asp:Parameter Name="id" Type="Int32" /> </SelectParameters> </asp:ObjectDataSource>
DataObjectTypeName/TypeName就不多说了,DeleteMethod/InsertMethod/SelectMethod/UpdateMethod是指当进行Delete/Insert/Select/Update事件时执行的方法,这里分别取自DAL层中的相关方法名. 注意这里多了一个<selectparameters>,因为我们显示详细记录时,要传递一个ID过来
public Blog.Entity.LinksEntity getDetail(int id) { .... }
最后一步,选中GridView控件,属性窗口中找到SelectedIndexChanged事件,双击它,进入.aspx.cs中书写,在这个事件中,要把ID的值传到ObjectDataSoruce2中,用于填充ID这个参数
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { ObjectDataSource2.SelectParameters["id"].DefaultValue = GridView1.SelectedValue.ToString(); form1.DataBind(); GridView1.DataBind(); }
ok,看效果吧
最后,asp.net2.0的数据控件给我们带来了很大的便利,使我们只需要拖动一些控件书写少量代码甚至是不需要写代码都能让我们轻而易举地显示数据表中的记录.
经典论坛讨论帖: http://www.blueidea.com/bbs/NewsDetail.asp?id=2542192
出处:蓝色理想
责任编辑:moby
上一页 asp.net 2.0之ObjectDataSourc控件 [1] 下一页
◎进入论坛网络编程版块参加讨论
|