Невозможно пройти через столбцы сетки вида (автоматически сгенерированный)? - PullRequest
2 голосов
/ 27 октября 2011

Я пытаюсь обойти столбцы gridview в веб-приложении ASP.net, используя следующий код. Однако код не входит в цикл foreach.скрыть некоторые столбцы из gridview.

Ответы [ 4 ]

1 голос
/ 27 октября 2011

Ваша проблема в том, что столбцы генерируются автоматически (gvEmployees.AutoGenerateColumns == true).Автоматически сгенерированные столбцы не в коллекции Columns.

Если вам нужен такой контроль над вашими столбцами, я думаю, вам нужно будет сгенерировать их во время разработки.Можете ли вы использовать объект DataSource любого вида в своей форме, а затем подключить его к GridView?Это создаст столбцы в вашем файле конструктора, чтобы соответствовать вашим данным, а не полагаться на AutoGenerateColumns для создания столбцов в DataBind ().Тогда столбцы будут в коллекции Columns.

1 голос
/ 27 октября 2011

Я думаю, я мог бы узнать, что пошло не так. Не следует использовать 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;
            }

        }
1 голос
/ 27 октября 2011

Я думаю, вы пытаетесь скрыть столбец на основе заголовка столбца, поэтому, пожалуйста, попробуйте следующий код,

// 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;
    }
}

Обновление при использовании автоматически генерируемых столбцов (для версии с одним столбцом),

Необходимо использовать событие привязки строки к строке и скрыть ячейку (столбец), когда строка связана.

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);
        }
    }
}
1 голос
/ 27 октября 2011

Переместите этот код в другое событие, например 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;
 }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...