簡體   English   中英

ASP.NET SQLDataSource 過濾記錄計數-冗余代碼

[英]ASP.NET SQLDataSource filtered records count - redundant code

這有點像我的一個老問題的后續問題,出於這個問題的目的,代碼可能幾乎相同。

主要的相關區別在於Button事件處理程序:

protected void btnFilter_Click(object sender, EventArgs e)
{
    Select();
}

private DataView Select()
{
    DataView _view = (DataView)sdsTable1.Select(DataSourceSelectArguments.Empty));
    _view.RowFilter = Filter();
    int _n = _view.Count; // Number of filtered records
    return _view;
}

以及在FilterExpression Selecting事件處理程序中完成的SQLDataSource分配:

protected void sdsTable1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
    sdsTable1.FilterExpression = Filter();
}

Filter function 只是以與舊代碼相同的方式評估過濾器字符串。

目前的問題是過濾產生的記錄計數。 使用以下代碼,我可以顯示從Select命令收集的記錄數

protected void sdsTable1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
    lblRecords.Text = "# records: " + e.AffectedRows.ToString();
}

不幸的是OnFiltering事件不會報告受影響的行集。

在不影響已經工作的代碼的情況下評估過濾產生多少記錄的最佳方法是什么?

我找到了一個可能的解決方案,但我認為這會觸發對同一數據集進行不需要的過濾。 對於大量數據,這可能是一個問題:

private DataView Select()
{
    DataView _view = (DataView)sdsTable1.Select(DataSourceSelectArguments.Empty));
    _view.RowFilter = Filter();
    int _n = _view.Count; // Number of filtered records
    return _view;
}

Select命令后AffectedRows將為 0,請參見

在此處輸入圖像描述

Select命令返回一個IEnumerable 您可以在其上調用.ToList()並且它具有Count屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM