ConvertEmptyStringToNull = ”false”, и все же преобразование все еще происходит - PullRequest
2 голосов
/ 31 января 2010

DetailsView привязано к ObjectDataSource. Внутри EditItemTemplate в Detailsview есть два текстовых поля (T1 и T2). T1 сопоставляется с параметром обновления типа String, а T2 сопоставляется с параметром обновления типа DateTime.

Предполагая, что оба TextBox содержат пустую строку, затем, когда я пытаюсь обновить источник данных, нажав кнопку Обновить DetailsView, ODS (или, возможно, DetailsView) автоматически преобразует пустую строку T1 в ноль, а пустая строка T2 преобразовать в ноль. Я пытался запретить ODS преобразовать пустую строку T1 в значение NULL, установив для свойства обновления ConvertEmptyStringToNull параметра T1 значение false (я также установил <asp:TemplateField ConvertEmptyStringToNull=”false” …>, но безрезультатно.

a) Есть идеи, почему пустая строка T1 преобразуется, а T2 нет?

b) Кроме того, как я могу предотвратить преобразование (кстати - я понимаю, что могу преобразовать ноль обратно в пустую строку в методе обновления)?

1010 * спасибо *

1 Ответ

2 голосов
/ 31 января 2010

а) Любая идея, почему пустая строка T1 получает конвертируется, а Т2 нет?

T2 - это DateTime, который является типом значения. Типы значений не могут быть нулевыми. Ну, если вы не используете Nullable тип

б) Кроме того, как я могу предотвратить преобразование (кстати - я понимаю, что мог преобразовать ноль обратно в пустую строку метод внутреннего обновления)?

РЕДАКТИРОВАТЬ: Я пытался продублировать проблему выше, но я мог продублировать проблему только тогда, когда я не указал ConvertEmptyStringToNull="false" в <asp:TemplateField> привязанного элемента управления AND <asp:Parameter> из <asp:ObjectDataSource>. Если вы пропустите один из них, вы получите пустое значение в пустом поле. С ConvertEmptyStringToNull="false", определенным в обоих местах, он не преобразует пустую строку в нулевое значение. Пустая строка передается правильно. Вы сказали, что пробовали это в обоих местах, поэтому я не уверен, почему это не работает для вас. Может быть, вы могли бы показать нам свой источник данных и разметку подробного просмотра.

С учетом вышесказанного, я думаю, что все еще хорошая идея сделать проверку, описанную ниже, в вашем бизнес-классе. Как вы сказали, вы можете преобразовать ноль обратно в пустую строку. Вот как я это сделал:

У меня есть вспомогательный класс, давайте назовем его BizObject, который содержит этот метод:

protected static string ConvertNullToEmptyString(string input)
{
  return (input == null ? "" : input);
}

Затем в методе вставки / обновления моего бизнес-класса я вызываю ConvertNullToEmptyString для каждого строкового параметра:

public static bool UpdateSource(string sourceName, DateTime sourceDate)
{
    sourceName = BizObject.ConvertNullToEmptyString(sourceName);
    ...
    bool ret = UpdateSource(record);
    return ret;
}
...