2012-03-31 7 views
0

У меня есть тикер, в котором используется jquery и Repeater. Но я получаю только последнюю обновленную запись из 10 new_Feed table.This является источником и кодом позади.Тикер новостей с использованием ретранслятора и JQuery

<ul id="js-news" class="js-hidden"> 
<li class="news-item"> 
    <asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
    <asp:Label ID="myLabel" runat="server" Text='<%# Eval("Text") %>' /> 
    </ItemTemplate> 
    </asp:Repeater> 
</li> 
</ul> 

SqlConnection con = new SqlConnection(Constring); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("select Text from News_Feed", con); 

    SqlDataAdapter sqlDa = new SqlDataAdapter(cmd); 
    DataTable dt = new DataTable(); 
    sqlDa.Fill(dt); 
    Repeater1.DataSource = dt; 
    Repeater1.DataBind(); 
    SqlDataReader reader = cmd.ExecuteReader(); 

    while (reader.Read()) 
    { 
     foreach (RepeaterItem ri in Repeater1.Items) 
     { 

      Label lbl = ri.FindControl("myLabel") as Label; 

      string Text= reader["Text"].ToString(); 
      lbl.Text = Text; 
     } 


    } 
    reader.Close(); 
+0

Ну, я тоже это пробовал. Затем я все 10 строк вместе, как 1 ряд. –

+0

Я думаю, этот комментарий для моего ответа. Это должно быть исправлено с некоторым стилем CSS. – Shyju

ответ

2

В коде, вы являетесь обязательными для контроллера ретранслятора с DataTable, а затем делаете запрос ExecuteReader и перекручивание через результирующий набор снова. Это не нужно. Вам нужно либо одно из них. Либо привязка данных через DataTable, либо Datareader.

Так что ваш код может быть изменен, как этот

using(SqlConnection con = new SqlConnection(ConString)) 
{ 
    SqlCommand cmd = new SqlCommand("select top 10 Text from News_Feed", con); 
    SqlDataReader reader = cmd.ExecuteReader(); 
    Repeater1.DataSource = reader; 
    Repeater1.DataBind(); 
} 

и в разметке

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
    <asp:Label ID="myLabel" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Text")%>' /> 
    </ItemTemplate> 
</asp:Repeater> 

Это должно работать. Он протестирован.

В вашем вопросе не отображается код jQuery. В основном вышеприведенный код загрузит 10 лучших записей в таблице, когда ваша страница загружается. Возможно, вам потребуется обновить запрос с помощью предложения order, чтобы получить правильные данные.

Если вы действительно хотите, чтобы какой-то динамически обновляемый тикер новостей (без перезагрузки страницы), вы должны использовать jQuery для этого. Сначала загружайте контент, а затем используя функцию javascript setInterval, выполняйте вызов ajax за каждые n секунд и перезагружайте тикер новостей данными, полученными от вызова ajax.

Вот простой, но рабочий пример для динамического загрузки контента с помощью jQuery ajax.

Есть DIV на странице, чтобы показать данные

<div id="divNews"></div> 

Добавьте ниже скрипт на страницу

<script type="text/javascript"> 

    $(function() { 
     function GetNewsItems() { 
      $("#divNews").load("newsfeed.ashx"); 
     } 
     setInterval(function() { GetNewsItems() }, 5000); 
    }); 

</script> 

Так вышеописанный скрипт использует setInterval функцию для выполнения GetNewsITems функции для загрузки данные каждые 5 секунд. Он вызывает файл с именем newsfeed.ashx для данных . Создайте общий обработчик caleld newsfeed.ashx и замените код в методе ProcessRequest ниже:

public void ProcessRequest(HttpContext context) 
{ 
     context.Response.ContentType = "text/plain"; 
     StringBuilder str = new StringBuilder(); 
     str.Append("<ul>"); 
     using (SqlConnection con = new SqlConnection(ConString)) 
     { 
      SqlCommand cmd = new SqlCommand("select Text from News_Feed ORDER BY ID DESC", con); 
      SqlDataReader reader = cmd.ExecuteReader(); 
      while (reader.Read()) 
      { 
       str.Append("<li>"+reader.GetString(0)+"</li>"); 
      } 
     } 
     str.Append("</ul>"); 
     context.Response.Write(str.ToString()); 
} 

Общий обработчик вернет разметку элемента UL с 10 элементами из таблицы. мы загружаем это содержимое в div, используя метод загрузки jQuery.

+0

На самом деле нет ничего плохого в jQuery..Итак, я использую его с '

  • jQuery News Ticker теперь поддерживает языки справа налево!
  • \t \t
  • jQuery News Ticker теперь поддерживает загрузку контента через RSS-канал!
  • \t \t
  • jQuery News Ticker теперь имеет дополнительный эффект затухания между элементами!
  • \t \t
  • Новые обновления были добавлены в jQuery News Ticker! Подробнее см. Ниже!
  • > он работает отлично .. но с тех пор, как я использую динамическую метку .. вызывает проблемы! –