Как мне перевести TotalRowCount из LinqDataSource в литерал?

У меня есть LinqDataSource, который я использую для вычисления количества строк в таблице. Я хотел бы обновить значение литерала числом с помощью следующего кода, взятого из MSDN (linqdatasourcestatuseventargs.totalrowcount.aspx):

protected void linqDataSource1_Selected(object sender, LinqDataSourceStatusEventArgs e)
{
    Literal1.Text = e.TotalRowCount.ToString();
}

Как мне вызвать событие выбора в источнике данных? Класс SqlDataSource имеет метод Select (), поэтому его можно запускать программно, например, в Page_Load, но у LinqDataSource нет этого метода. В настоящее время я решил проблему, привязав свой источник данных к пустому элементу FormView, но это слишком некрасиво.

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

Предложение tvanfosson о присоединении метода к выбранному событию источника данных, к сожалению, не решает мою проблему, потому что событие select по-прежнему не запускается при загрузке страницы. (Я, кстати, уже прикрепил метод _Selected с атрибутом OnSelected, вот так)

<asp:LinqDataSource ID="linqDataSource1" runat="server"
    OnSelected="linqDataSource1_Selected">

person Jan Aagaard    schedule 17.11.2008    source источник
comment
Это метод Linq ... или linq ... (разница в регистре)? Ваши OnSelected точки @ linq ... но имя метода - Linq ...   -  person GalacticCowboy    schedule 19.11.2008
comment
Спасибо, что заметили. Хотя это было просто типично. знак равно   -  person Jan Aagaard    schedule 20.11.2008


Ответы (2)


Подключите свой метод как обработчик событий для события Selected в Page_Load.

public void Page_Load( object sender, EventArgs e )
{
     linqDataSource1.Selected += LinqDataSource1_Selected;
}

protected void LinqDataSource1_Selected(object sender, LinqDataSourceStatusEventArgs e)
{
    Literal1.Text = e.TotalRowCount.ToString();
}
person tvanfosson    schedule 18.11.2008

В итоге я отбросил источник данных и вместо этого поместил код в код. Не совсем то программирование по принципу «укажи и щелкни», к которому я стремился, но все же довольно короткое. Я выгляжу примерно так:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        var context = new MyDataContext();

        numberOfModificationsLiteral.Text =
            (
                from modification in context.Modifications
                where modification.Start >= DateTime.Now
                select modification
            ).Count().ToString();
    }
}
person Jan Aagaard    schedule 19.11.2008