C# 无法遍历gridview列(自动生成)?

C# 无法遍历gridview列(自动生成)?,c#,gridview,C#,Gridview,我正在尝试使用以下代码遍历ASP.net web应用程序中的gridview列,但是代码没有进入foreach循环 // Code snippet to hide columns from a gridview named 'gvEmployees' gvEmployees.DataSource = dvItems.ToTable(); gvEmployees.DataBind(); string name = "First Name"; //Column name supposed to hi

我正在尝试使用以下代码遍历ASP.net web应用程序中的
gridview
列,但是代码没有进入
foreach
循环

// Code snippet to hide columns from a gridview named 'gvEmployees'
gvEmployees.DataSource = dvItems.ToTable();
gvEmployees.DataBind();
string name = "First Name"; //Column name supposed to hide
int index=-1;

foreach (DataColumn col in gvEmployees.Columns)
{
   if (col.ColumnName.ToLower().Trim() == name.ToLower().Trim())
   {
      // Getting the column index if find a match
      index= gvEmployees.Columns.IndexOf(col); 
      // Using the above index, hiding the column from the grid view.
      gvEmployees.Columns[index].Visible = false;
   }

}

我正试图从
gridview
隐藏一些列

将这些代码移动到其他事件,如rowInitialize、PreRender或GridInitialize

string name = "First Name";// Column name supposed to hide
int index=-1;
foreach (DataColumn col in gvEmployees.Columns)
{
 if (col.ColumnName.ToLower().Trim() == name.ToLower().Trim())
 {
  col.Visible = false;
 }

}

我想我可能会发现出了什么问题。不应使用DataColumn作为枚举变量的数据类型。试试这个:

        string name = "First Name";// Column name supposed to hide
        for (int i = 0; i < gvEmployees.Columns.Count; i++)
        {
            if (gvEmployees.Columns[i].HeaderText.ToLower().Trim() == name.ToLower().Trim())
            {
                gvEmployees.Columns[i].Visible = false;
            }

        }
string name=“First name”//应该隐藏的列名
对于(int i=0;i
我认为您试图根据列标题隐藏列,因此请尝试以下代码

// Code snippet to hide columns from a gridview named 'gvEmployees'
gvEmployees.DataSource = dvItems.ToTable();
gvEmployees.DataBind();
string name = "First Name";// Column name supposed to hide
foreach (var col in gvEmployees.Columns)
{
  if (col.Text.ToLower().Trim() == name.ToLower().Trim())
  {
      // hiding the column from the grid view.
      col.Visible = false;
  }
}
更新 您还可以编写以下代码:

string name = "First Name";// Column name supposed to hide
for (int i = 0; i < gvEmployees.Columns.Count; i++)
{
    if (gvEmployees.Columns[i].Text.ToLower().Trim() == name.ToLower().Trim())
    {
        gvEmployees.Columns[i].Visible = false;
    }
}
string name=“First name”//应该隐藏的列名
对于(int i=0;i
使用自动生成列时更新(对于单列版本), 需要使用rowdatabound事件并在绑定行时隐藏单元格(列)

int index = 0;
bool hidden = false;
protected void gvEmployees_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
    if(hidden)
    {
         e.Row.Cells[index].Visible =  false;
         return;
    }

    string name = "First Name";// Column name supposed to hide
    for (int i = 0; i < e.Row.Cells.Count; i++)
    {
        if (e.Row.Cells[i].Text.ToLower().Trim() == name.ToLower().Trim())
        {
            e.Row.Cells[i].Visible = false;
            hidden = true;
            index = i;
            break;
        }
    }
}
List<int> indexes = new List<int>();
bool hidden = false;
List<string> names = new List<string>();
protected void gvEmployees_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
    if(hidden)
    {
         foreach(int index in indexes)
         {
             e.Row.Cells[index].Visible =  false;
         }
    }

    // start - Column names supposed to hide
    // Building the list of column names to be hidden.
    names.Add("First Name");
    names.Add("Last Name");
    names.Add("Address");
    names.Add("ID");
    // end - Column names supposed to hide

    for (int i = 0; i < e.Row.Cells.Count; i++)
    {
        if (names.Contains(e.Row.Cells[i].Text.ToLower().Trim())
        {
            e.Row.Cells[i].Visible = false;
            hidden = true;
            indexes.Add(i);
        }
    }
}
int索引=0;
布尔隐藏=假;
受保护的void gvu RowDataBound(对象发送者,System.Web.UI.WebControls.GridViewRowEventArgs e)
{
如果(隐藏)
{
e、 Row.Cells[index].Visible=false;
返回;
}
string name=“First name”;//应该隐藏的列名
for(int i=0;i
使用自动生成的列时更新(对于多列版本) 使用rowdatabound事件并在绑定行时隐藏单元格(列)

int index = 0;
bool hidden = false;
protected void gvEmployees_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
    if(hidden)
    {
         e.Row.Cells[index].Visible =  false;
         return;
    }

    string name = "First Name";// Column name supposed to hide
    for (int i = 0; i < e.Row.Cells.Count; i++)
    {
        if (e.Row.Cells[i].Text.ToLower().Trim() == name.ToLower().Trim())
        {
            e.Row.Cells[i].Visible = false;
            hidden = true;
            index = i;
            break;
        }
    }
}
List<int> indexes = new List<int>();
bool hidden = false;
List<string> names = new List<string>();
protected void gvEmployees_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
    if(hidden)
    {
         foreach(int index in indexes)
         {
             e.Row.Cells[index].Visible =  false;
         }
    }

    // start - Column names supposed to hide
    // Building the list of column names to be hidden.
    names.Add("First Name");
    names.Add("Last Name");
    names.Add("Address");
    names.Add("ID");
    // end - Column names supposed to hide

    for (int i = 0; i < e.Row.Cells.Count; i++)
    {
        if (names.Contains(e.Row.Cells[i].Text.ToLower().Trim())
        {
            e.Row.Cells[i].Visible = false;
            hidden = true;
            indexes.Add(i);
        }
    }
}
列表索引=新列表();
布尔隐藏=假;
列表名称=新列表();
受保护的void gvu RowDataBound(对象发送者,System.Web.UI.WebControls.GridViewRowEventArgs e)
{
如果(隐藏)
{
foreach(索引中的int索引)
{
e、 Row.Cells[index].Visible=false;
}
}
//开始-应该隐藏的列名
//生成要隐藏的列名列表。
姓名。添加(“名字”);
姓名。添加(“姓氏”);
名称。添加(“地址”);
名称。添加(“ID”);
//结束-应该隐藏的列名
for(int i=0;i
您的问题是列是自动生成的(gvEmployees.AutoGenerateColumns==true)。 自动生成的列在columns集合中不是



如果您希望对列进行这种控制,我认为您需要在设计时生成它们。您可以在窗体上使用任何类型的DataSource对象,然后将其连接到GridView吗?这将在设计器文件中生成与数据匹配的列,而不是依赖AutoGenerateColumns在Dat上创建列aBind()。然后这些列将在columns集合中。

谢谢你。我在这里真正做的是将所有数据放入grid view,然后使用dataview-RowFilter根据条件获取行。我的问题是,在我将上述代码置于rowInitialize或PreRender或GridInitialize下后,这些列将被隐藏!!.So例如,如果我的ROWFILTER where条件具有隐藏列,这会引发错误吗?我不认为ROWFILTER会导致隐藏列出现任何异常。不过,您可以尝试一下。谢谢,HM,我会这样做并让您知道!!嗨,我仍然无法进入foreach循环!!进入for循环或if条件?调试并查看gri是什么d、 Columns.Count?您的代码使用什么方法?@ojlovecd这是一个按钮\u单击,单击按钮我隐藏选定的列!!您使用的是自动生成的列吗?嗨,Harsh,我无法使用Title函数-它告诉您没有像Title这样的扩展名!!Nope Count返回0!!我在网格视图中大约有10列!!谢谢Harsh,However我将如何比较我在那里的专栏名称?向你致敬,你让我的日子过得很艰难:)如果不是你的耐心和勤奋,我不会想到这样的解决办法。非常感谢。或者在此基础上提出单独的问题。运气不好。。代码仍然没有进入foreach循环中。。。我在网格视图中有大约10列!!计数返回0!!我在网格视图中有大约10列@Jithu gvEmployees.AutoGenerateColumns等于true?@Jithu那么你应该把这些代码放到gvEmployees.databound的处理程序中你是对的,实际上这个gridview从三个不同的视图中获取值,所以我无法在设计时完成该列!!有什么解决办法吗?听起来好像有很多工作要做,但我认为您需要在设计时添加所有列。您的列集的动态性如何?您必须有一组最大可能的列来显示…?用户提供了一个下拉列表,用户可以在其中选择所需的视图/列。所以每次表和gridview列标题都会不同!!