參考: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" SortExpr
<asp:BoundField DataField="PWD" HeaderText="PWD" SortExpr
<asp:BoundField DataField="Email" HeaderText="Email" SortExpr
</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" SortExpr
<asp:BoundField DataField="PWD" HeaderText="PWD" SortExpr
<asp:BoundField DataField="Email" HeaderText="Email" SortExpr
</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" SortExpr
<asp:BoundField DataField="PWD" HeaderText="PWD" SortExpr
<asp:BoundField DataField="Email" HeaderText="Email" SortExpr
</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会说找不到后台匹配更新函数