Связывание источника данных повторителя - PullRequest
1 голос
/ 05 октября 2009

Я использую привязку данных для перебора набора записей, возвращаемых из базы данных, и один из этих наборов записей представляет собой список элементов, разделенных запятыми, - я пытаюсь использовать второй повторитель для отображения каждого из этих элементов в виде гиперссылки. Пока это код, который у меня есть:

<asp:Repeater ID="myRepeater" runat="server" DataSource='<%# DataBinder.Eval(Container.DataItem, "SomeList").ToString().Trim(',') %>'>
<ItemTemplate>
    <a href='http://somesite/downloadattachment.aspx?itemid=<%# Container.ItemIndex %>'><%# Container.DataItem %></a>
</ItemTemplate>
</asp:Repeater>

Проблема в том, что на данный момент есть 3 причины, по которым это не работает:

  • Я получаю ошибку server tag is not well formed, если не удалю runat="server" - почему это так? (А почему работает без runat="server"?)
  • Container.DataItem Оценивает экземпляр System.Data.DataRowView - как получить текущий фрагмент строки, которую я разделил?
  • Что еще более важно, это, кажется, выводит только 1 Container.DataItem, даже когда я знаю, что в строке, которую я ей дал, есть запятая - есть идеи?

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Вы указали команду обновления, команду удаления в sqldatasource?

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

Для получения дополнительной информации об этом, пожалуйста, проверьте этот URL: http://www.itpian.com/Coding/4774-Data-binding.aspx

1 голос
/ 05 октября 2009

Вместо Eval (), для нетривиальных сценариев я обычно приводю Container.DataItem к нужному типу, а затем действую оттуда безопасным для типов способом.

Ошибка "неправильно сформированная" вызвана одинарными кавычками вокруг параметра Trim (). Если вы используете одинарные кавычки вне определения атрибута, вы не можете использовать их внутри него. В тех случаях, как у вас, где определение привязки данных содержит много кода, я часто создаю вспомогательный метод (либо внутри скрипта runat = server для представлений MVC и других дружественных для встроенного кода случаев, либо в коде для традиционных приложения веб-форм), который обрабатывает код, который я хочу запустить. Путем рефакторинга в метод он проясняет HTML и обходит хромые ограничения одинарных / двойных кавычек.

Независимо от того, куда вы положили код, В вашем случае вы хотите:

  1. приведение Container.DataItem к DataRowView
  2. извлечь значение столбца SomeList с помощью оператора []
  3. вызовите String.Split () для этой строки, чтобы превратить вашу CSV-строку в массив строк
  4. используйте это как источник данных вашего внутреннего ретранслятора

Код должен выглядеть примерно так:

<asp:Repeater ID="myRepeater" runat="server" 
    DataSource='<%# ((System.Data.DataRowView)Container.DataItem)["SomeList"].ToString().Split(new string[] {","}, StringSplitOptions.RemoveEmptyEntries)%>'>
  <ItemTemplate>
    <a href='http://somesite/downloadattachment.aspx?itemid=<%# Container.ItemIndex %>'>
      <%# Container.DataItem %>
    </a>
  </ItemTemplate>
</asp:Repeater>
...