• ObjectDataSource用法之五(更新)


    1. 准備條件

    參考:ObjectDataSource用法之一(SelectMethod來進行簡單的邦定)

    2. 在業務處理類中添加如下方法

    public void UpdateItem(string old_UID,string old_Email, string UID, string PWD, string Email)
    {
        HttpContext.Current.Response.Write("old_UID = " + old_UID + "<br/>");
        HttpContext.Current.Response.Write("old_Email = " + old_Email + "<br/>");
        HttpContext.Current.Response.Write("UID = " + UID + "<br/>");
        HttpContext.Current.Response.Write("PWD = " + PWD + "<br/>");
        HttpContext.Current.Response.Write("Email = " + Email + "<br/>");
    }

    3. aspx頁面內容為

    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
        SelectMethod="AllItems" TypeName="Member"
    UpdateMethod="UpdateItem" OldValuesParameterFormatString="old_{0}">
            <UpdateParameters>
                <asp:Parameter Name="old_UID" />
                <asp:Parameter Name="old_Email" />
            </UpdateParameters>
        </asp:ObjectDataSource>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AutoGenerateEditButton="true"
        DataSourceID="ObjectDataSource1" DataKeyNames="UID,Email">
        <Columns>
            <asp:BoundField DataField="UID" HeaderText="UID" SortExpression="UID" />
            <asp:BoundField DataField="PWD" HeaderText="PWD" SortExpression="PWD" />
            <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
        </Columns>
    </asp:GridView>

    4. 說明:

    UpdateMethod:指定的是業務處理類中的更新操作的方法名稱
    OldValuesParameterFormatString:表示給UpdateMethod指定的更新方法傳遞參數,其格式為:一個字符串但這個字符串中必須有{0}字樣。這里的{0}將會有邦定控件的DataKeyNames屬性指定的值來填充了, 當DataKeyNames有多個值時,我們需要在UpdateParameters集合中添加多個參數了,這里的參數名稱為OldValuesParameterFormatString指定的字符串將其它的{0}換成DataKeyNames中的值,這個參數的作用是:傳遞記錄的主鍵和一些唯一欄位的值. 它所記錄的是更新前的數據了...如上...

    從上面我們可以看到UpdateItem方法有5個參數了,而我們通過UpdateParameters只指定了二個參數,還有三個參數怎麼來的呢?這三個參數是Gridview中可編輯欄位的值了.這里怎麼理解呢?我們將上面的代碼改寫成如下:

    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
        SelectMethod="AllItems" TypeName="Member" UpdateMethod="UpdateItem" OldValuesParameterFormatString="old_{0}">
            <UpdateParameters>
                <asp:Parameter Name="old_UID" />
                <asp:Parameter Name="old_Email" />
            </UpdateParameters>
        </asp:ObjectDataSource>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" AutoGenerateEditButton="true"
        DataSourceID="ObjectDataSource1" DataKeyNames="UID,Email">
        <Columns>
            <asp:BoundField DataField="UID" HeaderText="UID" ReadOnly="true" SortExpression="UID" />
            <asp:BoundField DataField="PWD" HeaderText="PWD" SortExpression="PWD" />
            <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
        </Columns>
    </asp:GridView>

    注意我們將UID欄位設為了不可編輯的..那麼這個時候還使用上面有五個參數的UpdateItem方法就會出錯了...改應該使用public void UpdateItem(string old_UID,string old_Email,string PWD, string Email)四個參數的方法了,還有一點要註意的就是這里的PWD,Email參數的名稱對應為GridView中的DataField名稱......

    當然我們也可以將以上代碼改寫成如下也是一樣的效果

    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
        SelectMethod="AllItems" TypeName="Member" UpdateMethod="UpdateItem" OldValuesParameterFormatString="old_{0}">
            <UpdateParameters>
                <asp:Parameter Name="old_UID" />
                <asp:Parameter Name="old_Email" />
                <asp:Parameter Name="UID" />
                <asp:Parameter Name="PWD" />
                <asp:Parameter Name="Email" />
            </UpdateParameters>
        </asp:ObjectDataSource>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" AutoGenerateEditButton="true"
        DataSourceID="ObjectDataSource1" DataKeyNames="UID,Email">
        <Columns>
            <asp:BoundField DataField="UID" HeaderText="UID"  SortExpression="UID" />
            <asp:BoundField DataField="PWD" HeaderText="PWD" SortExpression="PWD" />
            <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
        </Columns>
    </asp:GridView>

    以上這個代碼才是全稱,上面的只是默認的....

    如果更新方法UpdateItem還多了一些不是在GridView中編輯的參數(如更新日期,更新人等)
    public void UpdateItem(string old_UID, string old_Email, string UID, string PWD, string Email, string UpdateDate, string Updater)
    怎麼辦呢?

    我們也可以通過程式來給UpateParameters賦參數

    ObjectDataSource1.UpdateParameters.Add("UpdateDate", DateTime.Now.ToShortDateString());
    ObjectDataSource1.UpdateParameters.Add("Updater", "limin");



    <圖一>



    <圖二>

    另外ObjectDataSuorce的parameter(参数设置),如果在GridView上有相应的列,不用显示声明,ObjectDataSuorce会自动将GridView上存在的可编辑的数据列(更新的时候是<%#Bind("的字段")%>,查询的时候是<%#Eval("的字段")%>)自动生成Parameter参数,另外parameter的名称与实体对象的属性、后台DAL或BLL层函数的参数匹配是不区分大小写的,但是有一个特例是如果GridView有DataKeyName字段,则ObjectDataSuorce的update的各个parameter里面不允许出现与DataKeyName名称且大小写完全相同的parameter,否者ObjectDataSuorce会说找不到后台匹配更新函数

  • 相关阅读:
    今天开始用 VSU 2010
    Visual Studio 2010 模型设计工具 基本应用
    Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
    Enterprise Library 4.1 Security Block 快速使用图文笔记
    解决“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。”(图)
    一个Oracle存储过程示例
    Enterprise Library 4.1 Application Settings 快速使用图文笔记
    Oracle 10g for Windows 简体中文版的安装过程
    Oracle 11g for Windows 简体中文版的安装过程
    Oracle 9i 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程 (图)
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/1567725.html
Copyright © 2020-2023  润新知