2014-07-11 53 views
0

我有下面的代碼顯示從一個SQL查詢中檢索某些列:如何使用EVAL得到一個字符串的最後四個字符

<tr class="trOther"> 
    <td><%# Eval("LastName").ToString() %></td> 
    <td><%# Eval("FirstName").ToString() %></td> 
    <td><%# Eval("SSN").ToString().Substring(Eval("SSN").ToString().Length - 4, 4) %></td> 
    <td><asp:Button ID="btnGeneratePDF" ClientIDMode="Static" runat="server" Text="Generate PDF" CommandArgument='<%# Eval("LastName").ToString() + ", " + Eval("FirstName").ToString() %>' /></td> 
</tr> 

SSN有時爲空,因此在這種情況下,我想它不顯示任何內容,否則顯示SSN的最後四位數字。

例如:

123-12-1234它將顯示1234

123121234它將顯示1234

在 '' 它將顯示 ''(列沒有的值)

當我運行代碼時,出現以下錯誤:

StartIndex cannot be less than zero

我猜這是因爲其中一個項目爲空。我該如何解決它? (也許用一個:?模仿if/else語句在那裏?)

+0

是的,三元運算符。或者,更好的方法在代碼 – Andrei

回答

1

您可以使用以下

<td><%# Eval("SSN").ToString().Length > 4 ? 
    Eval("SSN").ToString().Substring(Eval("SSN").ToString().Length - 4, 4) 
    :Eval("SSN").ToString() %></td> 
+0

謝謝,問題是如果數字是'123121234'它顯示'34'但是如果它是'123-23-1234'那麼它顯示'1234'所以有些東西是不正確的。 – Si8

+0

此代碼看起來適合我。如果您使用此代碼和我的答案獲得相同的結果,則應該更仔細地檢查您的數據。 – Grax

+0

@Grax我在某些SSN上有兩個額外的空格:/我提高了您的答案並接受了這個答案,因爲這更簡單易用。感謝你們兩位 – Si8

1

您可以添加一個擴展方法,如下面的一個稱呼它<td><%# Eval("SSN").ToString().SafeSmartSubstring(-4,4) %></td>

public static string SafeSmartSubstring(this string myString, int startIndex, int length) 
    { 
     var str = (myString ?? "").PadLeft(length); 

     if (startIndex < 0) 
     { 
      startIndex = str.Length + startIndex; 
     } 

     return str.Substring(startIndex, length).Trim(); 
    } 
+0

同樣的事情,我得到了與其他答案相同的結果...:/ – Si8

+0

在我編輯版本的測試中(我的第一篇文章被破解),我得到「123121234」和「123-23」都是「1234」 -1234「 – Grax

+0

我會再試一次。謝謝。 – Si8

相關問題