如何使用ObjectDataSource在DataObject中将字符串转换为datetime

时间:2011-03-26 12:12:50

标签: .net asp.net sql webforms objectdatasource

我有一个用于在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());

但仍然没有工作...... :(

2 个答案:

答案 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"]