是否有任何方式來調出一個數據綁定中的字段中的變化的子標題行asp:repeater控件例如asp:repeater - 標題在部分更改
而不是
country | colour | number uk | red | 3 uk | green | 3 france | red 3
這樣做:
==UK== colour | number red | 3 green 3 ==FRANCE== colour | number red | 3
任何幫助非常感謝。
是否有任何方式來調出一個數據綁定中的字段中的變化的子標題行asp:repeater控件例如asp:repeater - 標題在部分更改
而不是
country | colour | number uk | red | 3 uk | green | 3 france | red 3
這樣做:
==UK== colour | number red | 3 green 3 ==FRANCE== colour | number red | 3
任何幫助非常感謝。
似乎有是在dotnetjunkies代碼的一些錯誤,但我發現這裏更簡單的解決http://www.west-wind.com/weblog/posts/140753.aspx
現在中繼器不支持分組,所以你必須要做到這一點你自己的,但它的很容易做到。在以下的數據表達上面的中繼器是負責分組:
<%# this.RenderGroup(Eval("Group") as
string) %>
表達調用窗體上的方法來呈現一個額外的div標籤。這個簡單的方法的代碼如下所示:
string LastGroup = "@#@~";
protected string RenderGroup(string Group) {
if (Group == this.LastGroup)
return ""; // *** Group has changed
this.LastGroup = Group;
return "<div class='groupheader'>" +Group + "</div>";
}
此代碼被調用的每一個項目,它只是檢查,看看組是否已經改變。如果它沒有返回任何內容,則返回一個簡單的div標籤作爲字符串嵌入到標記中。我選擇發回HTML,但我想你也可以返回true或false,並有條件地在Repeater中渲染一個控件,這會讓CSS納粹更快樂。
啊 - 你是在一個分組中繼器之後。我過去改編的solution似乎已經消失了。也許你可以找到它。但無論如何,搜索分組中繼器應該有所幫助。
沒有內置支持,但這並不意味着這是不可能的。
你需要過騎OnItemDataBound事件,並有標記是這樣的:
<asp:Repeater OnItemDataBound="NextItem" ... >
<ItemTemplate><asp:Literal Id="Header" Visible="False" Text="{0}<strong>{1}</strong><br/><table>" ... />
<tr>
<td><asp:Label id="Color" Text="<%# Eval("Color")" ... /></td>
<td><asp:Label id="Number" Text="<%# Eval("Number")" ... /></td>
</tr>
</ItemTemplate>
</asp:Repeater></table>
然後在後臺代碼:
private string CurCountry = string.Empty;
private void NextItem(object sender, RepeaterItemEventARgs e)
{
if (e.Item.ItemType != ListItemType.Item
&& e.Item.ItemType != ListItemType.AlternatingItem) return;
DbDataRecord row = (DbDataRecord)e.Item.DataItem;
if (CurCountry != row["country"].ToString())
{
string prev = (CurCounter == string.Empty)?"":"</table>";
CurCountry = row["country"].ToString();
Literal header = (Literal)e.Item.FindControl("Header");
Literal footer = (Literal)e.Item.FindControl("Footer");
header.Text = string.Format(header.Text, prev, CurCountry);
header.Visible = true;
}
}
謝謝!這對我有效。 – Eden 2011-11-28 18:59:05
喬爾的解決方案,我可以指點下 - 改變這一行:
header.Text = string.Format("<strong> {0} </strong><br/><table>", CurCountry);
到
header.Text = string.Format(header.Text, CurCountry);
而且你可以自定義外觀&感受.as?x文件。
另一種解決方案是簡單地使用兩個中繼器,一個嵌套在另一箇中。您可以將帶有子記錄的組傳遞給第一個轉發器,並在組轉發器的ItemDataBound上將子記錄傳遞給子轉發器,並在那裏調用DataBind()。
這是更多的代碼,但實際上可以讓您更好地控制佈局,而無需在您的代碼隱藏中創建HTML代碼。
正如您在此處看到的,我們有一個父級重複器,並且在項目模板中,我們可以根據需要自定義每個組。在ChildRepeater中,我們有我們的項目模板,我們可以在該模板中自定義分組內的每個項目。非常乾淨,所有的聲明性用戶界面。
<asp:Repeater runat="server" id="GroupRepeater">
<ItemTemplate>
<asp:Literal runat="server" id="HeaderText" />
<asp:Repeater runat="server id="ChildRepeater">
<ItemTemplate>
<asp:Literal runat="server" id="InfoGoesHere" />
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
在後面的代碼,我們可以有這樣的事情:
private void GroupRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//Get the child records, this can be any data structure you want
SomeChildCollection children = ((SomeGroupCollection)e.Item.DataItem).Children;
//Find the child repeater
Repeater childRepeater = e.Item.FindControl("ChildRepeater") as Repeater;
childRepeater.ItemDataBound += SomeMethod;
childRepeater.DataSource = children;
childRepeater.DataBind();
}
結合每一個孩子,您可以訂閱ItemDataBound事件後,做孩子,你認爲合適的結合來控制。
乾杯,這就是我要找的。 – ctrlalt3nd 2009-02-03 14:28:01
該文章不再有效。 – NotMe 2010-02-09 17:59:38