在过滤器表达式后检查 gridview 计数

checking gridview count after filter expression

我正在研究 asp:GridView。在此 aspx 页面上,我为用户提供了通过在文本框中键入特定值来搜索当前 gridview 的选项。然后,我根据用户输入的内容设置了一个SqlDataSource.FilterExpression。

例如,用户键入 "MODEL1" 并点击搜索。那么:

SqlDataSource.FilterExpression = "ModelName= " + "'" + TextBox.Text + "'";

我接下来需要做的是检查是否拉到了结果?显然我可以判断它是否不在页面上,因为没有可见的 gridview。但是,我需要一种方法来捕获它,以便我可以重置 FilterExpression 并向用户抛出一条 "Incorrect search" 消息。我在 FilterExpression 下看不到任何对我有帮助的方法,我已经尝试 GridView.Rows.Count 但它似乎不起作用。我还有其他选择吗?还是我的 Rows.Count 方法有误?

下面是触发搜索事件时发生的一些额外代码:

        if (TextBox.Text == string.Empty)
        {
            errorLabel.Text = "Please enter a value";
        }
        else
        {
            SqlDataSource.FilterExpression = "ModelName= " + "'" + TextBox.Text + "'";
            if (!GridView.Rows.Count > 0)
            {
                errorLabel.Text = "Model not found";
                SqlDataSource.FilterExpression = "";
            }
        }

编辑: 只是想补充一点 GridView.Rows.Count 产生一个值 51,这是没有 FilterExpression 时存在的行数。

将你的结果放在 DataView 中,其中有 Count 属性:

SqlDataSource.FilterExpression = "ModelName= " + "'" + TextBox.Text + "'";
System.Data.DataView dv = (DataView)SqlDataSource.Select(DataSourceSelectArguments.Empty);
dv.RowFilter = SqlDataSource.FilterExpression;
int RowCount = dv.Count;

我建议您在 FilterExpression 上使用 String.Format()。它可以让您避免语法错误:

SqlDataSource.FilterExpression = String.Format("ModelName='{0}'", TextBox.Text);