在使用ObjectDataSource控件的時候,可以設置其SelectMethod、InsertMethod、UpdateMethod與DeleteMethod屬性,以便決定要使用業務對象的哪些方法來讀取、新建、修改與刪除數據,這些方法都可以接受參數。同時,GridView、DetailsView與FormView等數據綁定控件會自動創建所需參數的集合。
ObjectDataSource控件使用反射來匹配它的參數和被調用的方法的參數。參數的順序和大小寫並不重要,但是必須注意參數的名稱。
1 傳遞參數給業務對象的InsertMethod、UpdateMethod與DeleteMethod
1.1 業務對象方法
public DataSet GetAllList()
{
return GetList("");
}
public bool Add(string UserName, string Password)
{
Ced.Model.User model = new Ced.Model.User();
model.UserName = UserName;
model.Password = Password;
return dal.Add(model);
}
public bool Update(string UserName, string Password)
{
Ced.Model.User model = new Ced.Model.User();
model.UserName = UserName;
model.Password = Password;
return dal.Update(model);
}
public bool Delete(string UserName)
{
return dal.Delete(UserName);
}
public Ced.Model.User GetModel(string UserName)
{
return dal.GetModel(UserName);
}
1.2 在頁面中添加控件
<asp:GridView ID="GridView1" runat="server" DataKeyNames="UserName"
DataSourceID="ObjectDataSource1">
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True"
ShowSelectButton="True" />
<asp:HyperLinkField DataNavigateUrlFields="username"
DataNavigateUrlFormatString="Detail.aspx?username={0}" DataTextField="username"
DataTextFormatString="{0}的詳細信息" HeaderText="詳細" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
DeleteMethod="Delete" InsertMethod="Add"
SelectMethod="GetAllList" TypeName="Ced.BLL.User" UpdateMethod="Update">
</asp:ObjectDataSource>
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
DataSourceID="ObjectDataSource2" Height="50px" Width="125px">
<Fields>
<asp:BoundField DataField="UserName" HeaderText="UserName"
SortExpression="UserName" />
<asp:BoundField DataField="Password" HeaderText="Password"
SortExpression="Password" />
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True"
ShowInsertButton="True" />
</Fields>
</asp:DetailsView>
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
DeleteMethod="Delete" InsertMethod="Add"
SelectMethod="GetModel" TypeName="Ced.BLL.User" UpdateMethod="Update">
<DeleteParameters>
<asp:Parameter Name="UserName" Type="String" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="UserName" Type="String" />
<asp:Parameter Name="Password" Type="String" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="UserName"
PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
2 使用對象傳遞參數給業務對象的InsertMethod、UpdateMethod與DeleteMethod
2.1 給業務對象新增如下的方法,方法參數為實體對象
public bool Add(Ced.Model.User model)
{
return dal.Add(model);
}
public bool Update(Ced.Model.User model)
{
return dal.Update(model);
}
public bool Delete(Model.User user)
{
return Delete(user.UserName);
}
2.2 設置ObjectDataSource的DataObjectTypeName屬性
要通過實體對象來傳遞參數,必須將ObjectDataSource的DataObjectTypeName屬性設置為自定義的實體類名稱。且實體類必須有一個默認的構造方法,且公用屬性必須擁有get、set訪問器。同時,DataObjectTypeName屬性只會影響InsertMethod、UpdateMethod與DeleteMethod,不會影響SelectMethod。
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="Ced.Model.User"
DeleteMethod="Delete" InsertMethod="Add"
SelectMethod="GetAllList" TypeName="Ced.BLL.User" UpdateMethod="Update">
</asp:ObjectDataSource>
需要注意的是,設置了ObjectDataSource的DataObjectTypeName屬性后,如果所綁定的業務對象沒有包含參數為實體對象的InsertMethod、UpdateMethod與DeleteMethod,則會運行報錯,提示找不到相應方法。
