zoukankan      html  css  js  c++  java
  • 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会说找不到后台匹配更新函数

  • 相关阅读:
    POJ 2017 No Brainer(超级水题)
    POJ 2017 No Brainer(超级水题)
    Poj1207 The 3n + 1 problem(水题(数据)+陷阱)
    Poj1207 The 3n + 1 problem(水题(数据)+陷阱)
    Poj1159 Palindrome(动态规划DP求最大公共子序列LCS)
    Poj1159 Palindrome(动态规划DP求最大公共子序列LCS)
    Poj1050_To the Max(二维数组最大字段和)
    Poj1050_To the Max(二维数组最大字段和)
    Poj 2602 Superlong sums(大数相加)
    Poj 2602 Superlong sums(大数相加)
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/1567725.html
Copyright © 2011-2022 走看看