如何将LinqDataSource中的TotalRowCount转换为Literal?

时间:2008-11-17 13:40:09

标签: asp.net linq-to-sql

我有一个LinqDataSource用于计算表中的行数。我想用数字更新文字的值,以下代码取自MSDN(linqdatasourcestatuseventargs.totalrowcount.aspx):

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

如何触发数据源上的select事件? SqlDataSource类具有Select()方法,因此可以以编程方式触发它。 Page_Load,但LinqDataSource没有这个方法。我目前通过将我的数据源绑定到一个空的FormView元素来解决这个问题,但这太难看了。

我非常有信心在使用LinqToSql时有更好的方法可以将行总数放入我的文字中,我只是不知道如何这样做。

tvanfosson建议将方法附加到数据源的所选事件,遗憾的是不能解决我的问题,因为在页面加载时仍未触发select事件。 (顺便说一下,我已经使用OnSelected属性附加了_Selected方法,就像这样)

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

2 个答案:

答案 0 :(得分:3)

将您的方法作为Page_Load中的Selected事件的事件处理程序。

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();
}

答案 1 :(得分:0)

我最终删除了数据源,而是将代码放在代码中。不是我想要的点击式编程,但仍然很短。我看起来像这样:

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();
    }
}
相关问题