а) Любая идея, почему пустая строка 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;
}