如何使用 ObjectDataSource 将 DataObject 中的字符串转换为日期时间

发布于 2024-10-26 23:51:57 字数 880 浏览 1 评论 0原文

我有一个用于在数据库(sql server 2008)中选择、更新和删除记录的类和一个用于表示表记录的类,我认为这称为“活动记录”设计模式。 现在,我有了可以编辑、选择和删除项目的 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、日期、时间和位。 方法的EditHour参数是Hour类。 Hour 具有不带参数的构造,但是当程序设置属性“DateFrom” - C# 中的 DataTime 类型和 SQL Server 中的 Date 时,出现异常:System.InvalidOperationException,无法将表单字符串转换为 DateTime。

请帮忙,我该如何解决? 谢谢,Sebastian

编辑:我尝试为 GridView RowUpdating 添加事件处理程序并手动转换 DateTime,如下所示:

e.NewValues[1] = Convert.ToDateTime(e.NewValues[1].ToString());

但仍然不起作用...:(

I have one class for selecting, updating and deleting record in db (sql server 2008) and one class for represent table record, i think it's call 'Activ record' design pattern.
Now, I have GriwView with editing, selecting and deleting items. Data source for this grid is ObjectDataSource:

<asp:ObjectDataSource ID="ObjectDataSource" runat="server" 
        TypeName="DBOrdinacniDoby.Hours" 
        DataObjectTypeName="DBOrdinacniDoby.Hour"
        onobjectcreating="ObjectDataSource_ObjectCreating" 
        SelectMethod="GetAll"
        UpdateMethod="EditHour">
    </asp:ObjectDataSource>

In grid is types like: int, nvarchar, date, time and bit.
Method's EditHour parameter is class of Hour.
Hour have construct without parameters, but when program sets property 'DateFrom' - DataTime type in C# and Date in SQL Server, I got Exception: System.InvalidOperationException, Can't convert form string to DateTime.

Please help, how can I fix it?
Thanks, Sebastian

EDIT: I try add event handler for GridView RowUpdating and manually convert do DateTime like this:

e.NewValues[1] = Convert.ToDateTime(e.NewValues[1].ToString());

But still not working... :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沒落の蓅哖 2024-11-02 23:51:57

尝试在定义参数类型的位置添加 UpdateParametes。

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
     UpdateMethod="UpdateUser" ...>
        <UpdateParameters>
            <asp:Parameter Name="CreationDate" Type="DateTime" />
            <asp:Parameter Name="LastLoginDate" Type="DateTime" />
        </UpdateParameters>

为我工作。

Try to add UpdateParametes where you define Type of parameter.

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
     UpdateMethod="UpdateUser" ...>
        <UpdateParameters>
            <asp:Parameter Name="CreationDate" Type="DateTime" />
            <asp:Parameter Name="LastLoginDate" Type="DateTime" />
        </UpdateParameters>

Worked for me.

何以笙箫默 2024-11-02 23:51:57

解决此问题的一种方法是订阅 ObjectDataSourceUpdating Event
http://msdn.microsoft.com /en-us/library/system.web.ui.webcontrols.objectdatasource.updating.aspx

来自我的一个应用程序的代码示例(其中 Article 是我的业务层类):

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"] 必须与业务层方法的参数名称匹配:
就我而言:

public void UpdateArticle(Article item)
{
 // save changes into db
}

One way to fix this, is to subscribe to the Updating Event of the ObjectDataSource.
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.updating.aspx

Codesample from one of my apps (where Article is my Business Layer class):

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"] must match the parametername of your Business Layer method:
In my case:

public void UpdateArticle(Article item)
{
 // save changes into db
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文