2010-01-31 83 views
2

DetailsView绑定到ObjectDataSource。在DetailsView里面的EditItemTemplate是两个文本框(T1和T2)。 T1被映射到更新String类型的参数,而T2被映射到DateTime类型的更新参数。ConvertEmptyStringToNull =“false”,但转换仍然发生

假设两个文本框包含空字符串,则当我尝试通过点击DetailsView的更新按钮,ODS来更新数据源(或者是它也许的DetailsView)自动转换T1的空字符串为空,而T2的空字符串没有按”吨得到转换为空。我试图防止ODS通过T1的更新参数的ConvertEmptyStringToNull属性设置为false T1的空字符串转换为空(我以前也设置<asp:TemplateField ConvertEmptyStringToNull=”false” …>,但没有效果。

a)任何想法,为什么T1的空字符串被转换,而T2的不?

b)另外,我怎样才能防止转换(顺便说一句 - 我知道我可以将空字符串转换回更新方法内的空字符串)?

感谢名单

+0

@carewithl我以为我在重现您的问题,但我没有在两个地方同时定义它。请参阅下面的我的编辑。有没有什么你可能会有所帮助,就像在UpdatePanel中一样? – 2010-02-01 20:02:23

回答

2

a)任何想法,为什么T1的空字符串被转换 ,而T2的不?

T2是一个DateTime,它是一个值类型。值类型不能为空。好吧,除非你使用Nullable type

B)另外,我怎么能防止 转换(顺便说一句 - 我知道我可以 转换空回更新方法内空字符串 )?

编辑:我试着重复上面的问题,但我只能重复的问题时,我并没有在绑定控件<asp:TemplateField><asp:ObjectDataSource><asp:Parameter>指定ConvertEmptyStringToNull="false"。如果您离开,那么您将在空白区域获得空值。在两个地方都定义了ConvertEmptyStringToNull="false",它不会将空字符串转换为空值。空字符串正确传递。你说过你在两个地方都试过,所以我不确定它为什么不适合你。也许你可以告诉我们你的数据源和detailsview标记。

有了这个说法,我认为在商务舱做下面描述的支票仍然是一个好主意。就像你说的,你可以将null转换回空字符串。这是我如何做它:

我有一个辅助类,让我们把它叫做BizObject,包含此方法:

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

然后在我的业务类的Insert/Update方法我称之为ConvertNullToEmptyString每个串参数:

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

A)“好问题,我不知道为什么要......”您是否暗示您将ConvertEmptyStringToNull设置为false并且ODS仍然会将值转换为相同的问题?B)因此,实质上ODS设法将空字符串转换为DateTime.MinValue(假设参数的类型为DateTime),但是当将该值传递给方法时,它不能将null转换为空字符串!!这有点奇怪 – carewithl 2010-01-31 18:46:36

+0

@carewithl A)我确实尝试了你所说的,它仍然将空字符串转换为空,但我通常按照上面所述进行操作。 B)否ODS不会将空字符串转换为DateTime.MinValue MinValue是DateTime的默认值。 – 2010-02-01 01:36:05

+0

在我的答案中看到我的编辑。 – 2010-02-01 20:03:32

相关问题