Как я могу выдать дополнительный выбор из повторителя - PullRequest
0 голосов
/ 07 октября 2011

Я ищу строку кода, которая может показать, сколько ответов есть в теме на моем форуме.У меня есть повторитель (REPEATER_1) для отображения другой информации по каждой теме, например, ее заголовок и текст.Например, чтобы получить заголовок, я использую:

<%# DataBinder.Eval(Container, "DataItem.title")%>

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

"SELECT COUNT(ID) FROM [replies] WHERE parent='" & <%# DataBinder.Eval(Container, "DataItem.ID")%> & "';"

Но как мне выполнить эту команду SelectCommand из формы (и в области повторителя) страницы, используя <% # XXXX ..%>

Я знаю, что есть альтернативы, использующие code-behind, но я практикую делать это таким образом, используя <% # XXXX ..%>

Кроме того, как это называется, когда выполняется скрипт внутри формы с использованием "<%# XXXX ..%> "?Мне будет проще выполнять поиск в Интернете, поскольку Google или этот веб-сайт не могут искать "<% #" </p>

1 Ответ

0 голосов
/ 07 октября 2011

Я бы сделал это в событии ItemDataBound Повторителя.

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

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    // !! use a parameterized query here to avoid SQL injection
    string query = String.Format("SELECT x FROM y WHERE z = {0}", DataBinder.Eval(e.Item.DataItem, "SomeColumn"));

    //execute your query to get reply count
    int replyCount = ExecuteQuery(query); // !! example

    Label lbl = e.Item.FindControl("ReplyCountLabel") as Label;
    if (lbl != null)
    {
        lbl.Text = replyCount.ToString()
    }
}
...