2010-01-31 90 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

相關問題