我有一个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">
答案 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();
}
}