2011-01-26 26 views
0

我試圖做一個數據綁定循環,但它不按計劃工作,我不知道爲什麼。ASP.NET數據綁定時遇到的問題

Session("mysession") = "1234-5678-" 

Dim delimiters As Char() = New Char() {"-"C} 

Dim nodes As XmlNodeList 

Dim mystring As String() = Trim(Session("mysession")).Split(delimiters, StringSplitOptions.RemoveEmptyEntries) 

For x = 0 to mystring.Length - 1 

nodes = doc.SelectNodes("this/that[@number='" & mystring(x) & "']/something/blah") 

Response.write(mystring(x)) 

repeater.DataSource = nodes 
repeater.DataBind() 

Next 

我知道,它是通過循環得到正確,因爲我把response.write中,但它只是數據綁定字符串中的最後一項

任何想法如何,我可以讓數據綁定每個字符串,而不是隻是最後一個?

謝謝

回答

0

我通過使用asp:XmlDataSource轉發器內解決了這個,然後做我的數據綁定的中繼OnItemDataBound事件

1

您在循環中調用DataBind()。每次通過它都會覆蓋以前的綁定值。

1

您正在重新綁定循環的每次迭代,因此循環結束後它將被綁定到最後一件事情,您告訴它綁定到的是循環的最後一次迭代。

(注:數據綁定並不意味着「這個數據追加到控制現有的數據」,而是「用這個數據的控制權。」這是一個破壞性操作,更換什麼是以前在那裏。)

您應該首先構建您的數據源(大概是循環),然後在循環完成後綁定到完全構建的數據源。大概這意味着你會想要追加nodes與每個迭代,而不是它分配它(它覆蓋了已有的內容)。但是,您需要稍微調試一下,並確保附加版本仍然具有數據意義,並且仍然可以綁定。它可能需要循環迭代之間的一些描述,等等。

1

每個DataBind()你會覆蓋以前的。與DataSource相同。 將這些移動到循環外部,而不是
nodes = doc.SelectNodes("this/that[@number='" & mystring(x) & "']/something/blah") ,將新節點追加到XmlNodeList

nodes += doc.SelectNodes("this/that[@number='" & mystring(x) & "']/something/blah") 或任何等效的VB代碼。

+0

我試過,但我得到一個錯誤'操作「+」不是類型「字符串」和'定義System.Xml.XmlNodeList'.`看起來像我需要做的事情,但不太確定如何去做 - 謝謝你迄今的幫助 – 2011-01-26 16:30:00

0

它聽起來像你需要把你的中繼器到另一箇中繼器。 喜歡的東西

<Repeater ID="outerrepeater"> 
<Repeater ID="innerrepeater" /> 
</Repeater> 

然後在後面的代碼

PageLoad or whatever 
{ 
    outerrepeater.OnDataBound += new RepeaterDataBoundEvent(databind); //or is it ondatabinding 
    outerrepeater.DataSource = mystring; 
    outerrepeater.DataBind(); 
} 

void databind(object sender, EventArgs e) 
{ 
    Repeater inner = ((Repeater)((Repeater)sender).FindControl("innerrepeater")); 
    inner.DataSource = doc.SelectNodes("this/that[@number='" & mystring(x) & "']/something/blah"); 
    inner.DataBind(); 
} 

對不起它在C#但是這是什麼,我認爲你正在嘗試做的一般JIST。