ASP.NET проблема при привязке данных - PullRequest
0 голосов
/ 26 января 2011

Я пытаюсь создать цикл с привязкой к данным, но он работает не так, как планировалось, и я понятия не имею, почему.

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, но он только привязывает данные последней записи в строке

Есть идеи, как сделать так, чтобы данные связывали каждую строку, а не только последнюю?

Спасибо

Ответы [ 5 ]

1 голос
/ 26 января 2011

Вы повторно связываетесь с каждой итерацией цикла, поэтому после завершения цикла он будет привязан к последней вещи, к которой вы сказали привязать, которая является последней итерацией цикла.

(Примечание: привязка данных означает не «добавление этих данных к существующим данным элемента управления», а «использование этих данных для элемента управления». Это разрушительная операция, заменяющая то, что было ранее.)

Выследует сначала создать свой источник данных (предположительно с циклом), а затем выполнить привязку к полностью собранному источнику данных после завершения цикла.Предположительно это означает, что вам нужно добавлять к nodes с каждой итерацией, а не назначать (что перезаписывает то, что уже есть).Тем не менее, вы захотите немного отладить и убедиться, что добавленная версия по-прежнему имеет смысл с точки зрения данных и может быть связана с ней.Может потребоваться некоторое разграничение между итерациями цикла и т. Д.

1 голос
/ 26 января 2011

Каждый DataBind() вы перезаписываете предыдущие. И то же самое с DataSource. Переместите те, кто находится за пределами цикла, и вместо
nodes = doc.SelectNodes("this/that[@number='" & mystring(x) & "']/something/blah") , добавьте новый узел к XmlNodeList.

nodes += doc.SelectNodes("this/that[@number='" & mystring(x) & "']/something/blah") или любой другой эквивалентный код VB.

1 голос
/ 26 января 2011

Вы вызываете DataBind () в цикле. Каждый раз через него перезаписываются предыдущие значения привязки.

0 голосов
/ 28 января 2011

Я исправил это, используя asp:XmlDataSource внутри ретранслятора, а затем сделал привязку данных на ретрансляторе OnItemDataBound событие

0 голосов
/ 26 января 2011

звучит так, как будто вы должны поместить свой ретранслятор в другой ретранслятор.Что-то вроде

<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 #, но это основной момент того, что я думаю, вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...