我有一个用于在db(sql server 2008)中选择,更新和删除记录的类,以及一个用于表示表记录的类,我认为它叫做'Activ record'设计模式。 现在,我有GriwView编辑,选择和删除项目。此网格的数据源是ObjectDataSource:
<asp:ObjectDataSource ID="ObjectDataSource" runat="server"
TypeName="DBOrdinacniDoby.Hours"
DataObjectTypeName="DBOrdinacniDoby.Hour"
onobjectcreating="ObjectDataSource_ObjectCreating"
SelectMethod="GetAll"
UpdateMethod="EditHour">
</asp:ObjectDataSource>
在网格中是类型:int,nvarchar,date,time和bit。 方法的EditHour参数是Hour类。 小时有没有参数的构造,但是当程序设置属性'DateFrom' - C#中的DataTime类型和SQL Server中的日期时,我得到了异常:System.InvalidOperationException,无法将表单字符串转换为DateTime。
请帮忙,我该如何解决? 谢谢,塞巴斯蒂安
编辑:我尝试为GridView RowUpdating添加事件处理程序并手动转换do DateTime,如下所示:
e.NewValues[1] = Convert.ToDateTime(e.NewValues[1].ToString());
但仍然没有工作...... :(
答案 0 :(得分:1)
尝试添加UpdateParametes,您可以在其中定义参数类型。
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
UpdateMethod="UpdateUser" ...>
<UpdateParameters>
<asp:Parameter Name="CreationDate" Type="DateTime" />
<asp:Parameter Name="LastLoginDate" Type="DateTime" />
</UpdateParameters>
为我工作。
答案 1 :(得分:0)
解决此问题的一种方法是订阅Updating Event
的{{1}}。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.updating.aspx
我的某个应用程序(其中Article是我的业务层类)的代码示例:
ObjectDataSource
protected void odsArticleDetail_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
Article item = (Article)(e.InputParameters["item"]);
TextBox txtDate = (TextBox)this.dvArticleDetail.FindControl("txtDate");
if (!String.IsNullOrEmpty(txtDate.Text))
{
item.PublishDate = DateTime.ParseExact(txtDate.Text, "dd.MM.yyyy", System.Globalization.CultureInfo.GetCultureInfo("de-DE"));
}
else
{
item.PublishDate = DateTime.Now;
}
}
必须与商家层方法的参数名称匹配:
就我而言:
e.InputParameters["item"]