4
A
回答
11
如果你有HeaderTemplate
或FooterTemplate
定義,你可以添加任何HtmlControl
或ServerControl
它們中的任內,然後編程顯示/隱藏它的代碼隱藏。
<asp:Repeater id="Repeater1" runat="server" OnItemDataBound="">
<HeaderTemplate>
<h1>My Repeater Data</h1>
<div id="NoRecords" runat="server" visible="false">
No records are available.
</div>
</HeaderTemplate>
<ItemTemplate>
...
</ItemTemplate>
</asp:Repeater>
這裏的背後
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (Repeater1.Items.Count < 1)
{
if (e.Item.ItemType == ListItemType.Header)
{
HtmlGenericControl noRecordsDiv = (e.Item.FindControl("NoRecords") as HtmlGenericControl);
if (noRecordsDiv != null) {
noRecordsDiv.Visible = true;
}
}
}
}
4
想一想使用ListView控制代替,其具有用於使用當數據源沒有任何數據。如果你選擇堅持使用Repeater
控制,想測試你的查詢記錄和可選顯示Label
或Literal
有你的「沒有行發現」的消息,而不是你的中繼器。
if (query.Any())
{
repeater.DataSource = query;
repeater.DataBind();
}
else
{
noRecordsLiteral.Visible = true;
}
1
的代碼你可以通過改變中繼邏輯或來驅動你想要的行爲中繼器提供數據做到這一點。我更喜歡中繼器不在其中。如果你熟悉MVC,那麼你的邏輯就不在視圖之內。
我用列表作爲數據源,而不是數據庫的結果在這裏節省了空間,但原理是一樣的。如果您從數據庫返回,您可能會收集IDataRecord作爲源。
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Linq;
namespace StackOverflowRepeater
{
public partial class Default : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
repeater.ItemDataBound += HandleRepeaterItemDataBound;
var data = new List<string>();
if (!data.Any()) // could also be data.Count < 1
{
data.Add("No Row Found");
}
repeater.DataSource = data;
repeater.DataBind();
base.OnInit(e);
}
void HandleRepeaterItemDataBound (object sender, RepeaterItemEventArgs e)
{
if ((e.Item.ItemType == ListItemType.AlternatingItem) || (e.Item.ItemType == ListItemType.Item))
{
var span = (HtmlGenericControl) e.Item.FindControl("output");
span.InnerText = e.Item.DataItem.ToString();
}
}
}
}
這假設以下加價:
<%@ Page Language="C#" Inherits="StackOverflowRepeater.Default" %>
<html>
<body>
<form runat="server">
<asp:Repeater id='repeater' runat="server">
<ItemTemplate>
<span id='output' runat="server" />
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>
3
下面是一個簡單的例子來演示顯示無記錄在中繼控制實測值。
<div id="NoRecords" runat="server" visible="false">
No records are available.
</div>
<asp:Repeater id="Repeater1" runat="server" OnPreRender="Repeater1_PreRender">
<HeaderTemplate>
<h1>My Repeater Data</h1>
</HeaderTemplate>
<ItemTemplate>
...
</ItemTemplate>
</asp:Repeater>
這裏是代碼隱藏
protected void Repeater1_PreRender(object sender, EventArgs e)
{
if (Repeater1.Items.Count < 1)
{
NoRecords.Visible = true;
Repeater1.Visible = false;
}
}
+0
這是我認爲最好的解決方案。整齊。 – Resource 2015-12-18 15:23:07
相關問題
- 1. Console.WriteLine沒有顯示消息
- 2. 消息框沒有顯示
- 3. django消息沒有顯示
- 4. AddModelError消息沒有顯示
- 5. Firefox插件:在C#中沒有發現更新消息,如消息顯示
- 6. 如何顯示消息,如果沒有記錄,發現
- 7. 如果沒有發現emp id,如何顯示錯誤消息
- 8. jQuery的 - 顯示消息時沒有在DOM元素髮現的匹配
- 9. jsRender - 如何在沒有數據顯示時顯示消息
- 10. 顯示消息時
- 11. log4j消息日誌中沒有顯示
- 12. CakePHP 2.6 flash消息沒有顯示
- 13. linux bash沒有顯示任務消息
- 14. nested_messages沒有顯示以前的消息
- 15. Django 1.6 - 消息沒有顯示
- 16. asp.net JavaScript消息沒有顯示出來
- 17. 沒有正確顯示消息
- 18. 消息框顯示沒有空格嗎?
- 19. 豆:消息沒有顯示出來
- 20. Catlina.out沒有顯示記錄的消息
- 21. CakePHP沒有顯示flash()消息?
- 22. Django 1.6消息沒有顯示
- 23. 模擬器沒有顯示消息框
- 24. JOptionPane.showMessageDialog()顯示但沒有任何消息?
- 25. 吐司消息沒有及時出現
- 26. Excel vba MsgBox顯示重複時發現消息
- 27. 顯示消息,如果沒有照片呈現
- 28. 發送消息到msmq中並顯示消息過期超時
- 29. Django的消息框架沒有顯示消息模板
- 30. ng消息沒有正確顯示消息
我意識到這是一個老公認的答案,但如果您使用此代碼將無法正常工作。在標記端使用HeaderTemplate,並且在代碼隱藏中,您嘗試爲ListItemType.Footer加載No Records div。爲了工作,代碼隱藏應該更新爲ListItemType.Header。 – Sam 2012-08-23 21:11:38
@Sam ok我更新了答案。很好的接收。 – jessegavin 2012-08-23 21:15:06
你也可以使用隱藏的div中繼元素之外,並檢查陣列可見的是什麼;) – 2014-11-10 12:34:50