Как преобразовать строку в дату и время в DataObject с ObjectDataSource - PullRequest
1 голос
/ 26 марта 2011

У меня есть один класс для выбора, обновления и удаления записи в БД (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, дата, время и бит. Параметр EditHour метода является классом Hour. Час имеет конструкцию без параметров, но когда программа устанавливает свойство DateFrom - тип DataTime в C # и Date в SQL Server, я получил исключение: System.InvalidOperationException, не могу преобразовать строку формы в DateTime.

Пожалуйста, помогите, как я могу это исправить? Спасибо, Себастьян

РЕДАКТИРОВАТЬ: я пытаюсь добавить обработчик событий для GridView RowUpdating и вручную преобразовать сделать DateTime, как это:

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

Но все еще не работает ...: (

Ответы [ 2 ]

1 голос
/ 31 марта 2012

Попробуйте добавить UpdateParametes, где вы определяете тип параметра.

0 голосов
/ 26 марта 2011

Один из способов исправить это - подписаться на Updating Event из ObjectDataSource. 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...