2011-07-01 177 views
1

我有一個數據中繼器正在讀取幾個不同的字段。但是,一些信息被拖拽是空的。我想在這種情況下隱藏這些字段。隱藏空字段

我不知道該怎麼做最好。我曾嘗試過以下方法:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
       ConnectionString="<%$ ConnectionStrings:db %>" 
       SelectCommand="SELECT GrName, GrRoom 
           FROM [Group] WHERE GrName LIKE 'A%' ORDER BY GrName && * IS NOT NULL"> 
      </asp:SqlDataSource> 

      <!-- output to page --> 
      <div data-role="collapsible-set"> 
       <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1"> 
        <ItemTemplate> 
      <div data-role="collapsible" data-collapsed="true"> 
           <p>Room: <%# Eval("GrRoom")%></p> 
         </div> 
        </ItemTemplate> 
       </asp:Repeater> 

或者,我在頭部做這樣的事嗎?

<script type="text/vbscript"> 
If (GrRoom = NULL) Then 
    display: none; 
End If 
</script> 

我不確定我現在正在抓這個概念。基本上,我想下面的功能爲運行:

「如果GrRoom是空的,不顯示」

任何思考這個?我感謝你的洞察力。我對ASP和.NET比較陌生,所以我仍然學到很多。

謝謝你的時間和幫助。

回答

2
<ItemTemplate> 
    <asp:PlaceHolder ID="PlaceHolder1" runat="server" 
    Visible='<%# Not [String].IsNullOrEmpty(If(TypeOf Eval("GrRoom") Is DbNull, [String].Empty, DirectCast(Eval("GrRoom"), String))) %>'> 
     <div data-role="collapsible" data-collapsed="true"> 
      <p> 
       Room: 
       <%# Eval("GrRoom")%></p> 
     </div> 
    </asp:PlaceHolder> 
</ItemTemplate> 


編輯
我沒有在第一測試它,現在我已經正確測試此代碼。我現在也在檢查空弦。請嘗試。
編輯2
我是用C#語法,對不起,現在被編輯用VB
編輯3
我添加和DBNull的檢查

+0

感謝您的幫助。我有點看着這個,但也不能讓它工作。總是得到一個預期標識符的錯誤。 – creativeedg10

+0

感謝您的更新,但我收到以下錯誤:Leading'。'要麼 '!'只能出現在「With」語句中。 – creativeedg10

+0

感謝阿德里安所有的更新和解釋。也許接近?至少,錯誤變得更小了,哈哈。我收到此錯誤:服務器標記格式不正確。雖然我看起來還好嗎?我沒有看到服務器標籤有任何錯誤... – creativeedg10

1

如果你的目標是不是要檢索在所有字段爲空的數據處,您的SQL語法很接近但需要調整:

SELECT GrName, GrRoom 
FROM [Group] 
WHERE GrName LIKE 'A%' 
AND IsNull(GrRoom, '') <> '' 
ORDER BY GrName 

「* not null」無效 - IS NOT NULL必須引用單個值,*引用結果集中使用的收集表中的所有列。

& &也沒有一個有效的WHERE結構 - 你必須使用「與」和「或」不& &和||

你的WHERE條件語句都訂單之前發生BY子句

最後 - 就像「A%」會自動過濾出空值,因爲空不能像一些具有價值。

所以,如果你使用sql,因爲我已經寫了它,這將確保GrName總是填充,所以你的ASP端,顯示/隱藏控件的邏輯是沒有必要的。

當然也有理由顯示/隱藏控件 - 但是如果您可以從發送到服務器的數據中消除不需要的行,那麼整體流量就會減少,並且「儘可能少和必要地」始終是數據傳輸的目標。

+0

感謝您的幫助@ TheEvilGreebo。你的解釋是有道理的,我感謝你的迴應。我使用了'A%'來獲取以字母A開頭的所有值。雖然我理解了您的步驟,但我不明白爲什麼在將WHERE切換到ORDER BY之前爲何出現錯誤?沒有意義。 – creativeedg10

+0

如果你的意思是在你上面的例子中的SQL中,那是因爲你在where子句的後面留下了一部分。你寫了「ORDER BY GrName && * IS NOT NULL」 - 但是&& * IS NOT NULL是過濾的一部分,而不是排序 –

+0

是的,我確實發現了錯誤的順序,調整了其他的東西並且讓它顯示正常。但是,它仍然沒有擺脫空白。現在仍然試圖排除此故障 – creativeedg10