ObjectDataSource使用初步


在使用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,則會運行報錯,提示找不到相應方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM