【问题标题】:Get GridView Row Count with Condition获取带有条件的 GridView 行数
【发布时间】:2011-12-16 01:47:18
【问题描述】:

我正在使用 VS2005 ASP.NET C# 和 SQL Server 2005。

我的网页上有一个 GridView 和几个标签。

我可以通过以下方式将行数的值分配到标签中:

UserFound.Text = GridView1.Rows.Count.ToString();

但是,当列 Role 内的值等于 "admin" 时,我想将另一个值分配给另一个标签,该标签计算行数。 p>

我该怎么做?示例和示例代码将不胜感激。


编辑:

int admincount=0;
foreach (DataRow oRow in GridView1.Rows)
{
    if (GridView1.Rows["User Role"].ToString().Trim().Contains("Admin"))
    {
        admincount++;
    }
}

AdminFound.Text = admincount.ToString();

我收到错误:

The best overloaded method match for System.Web.UI.WebContols.GridViewCollection.this[int] has some invalid arguments

Argument '1': canot convert from 'string' to 'int'

【问题讨论】:

    标签: c# asp.net sql visual-studio gridview


    【解决方案1】:

    您可以使用如下选择语句运行 sqlCommand.ExecuteScalar():

    select Count(UserRole) where UserRole = 'Admin'  
    

    返回的值可以用作标签文本;

    【讨论】:

      【解决方案2】:

      嗯.. 我假设你使用ADO.Net

      GridView1.DataBind() 之前,对Gridview 或要绑定到Gridview1 的数据表执行for 循环

      int admRows=0;
      for(int i=0;i<datatable1.Rows.Count;i++)
      {
        if(datatable1.Rows[i]["adminColumn"].ToString().Trim().ToLower().Contains("admin"))
        {
          admRows++;
        }
      }
      admFound.Text=admRows.ToString();
      GridView1.DataSource=datatable1;
      GridView1.DataBind();
      

      附: datatable1.Rows[i]["adminColumn"]datatable1.Rows["adminColumn"][i].. 我不确定.. 谷歌它

      【讨论】:

      • 如果在循环中使用 foreach 结构,会更容易理解。例如foreach (DataRow oRow in datatable1.Rows)。那么你就不用担心[i] 语法了。
      • 是的,如果循环的目的只是计数,foreach 会更好。但将来,他可能需要检查它是第一行还是最后一行,或者是表的某个特定行。发生这种情况时,我还没有找到在foreach 中实现这一目标的方法。所以我必须再次使用for 循环。谁能告诉我在foreach 中实现这一目标?
      • 如果我们需要这样做,我们只需在循环外添加一个计数器变量,该变量在每次循环结束时递增。
      • 不是和for循环一样吗??
      • 不,因为您不必为要在行中访问的每一列索引数据表行。
      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多