ObjectDataSource用法之五(更新)
參考: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会说找不到后台匹配更新函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架