Скрыть автоматически сгенерированный столбец в Gridview - PullRequest
8 голосов
/ 15 сентября 2009

У меня есть сетка, в которой используются автоматически созданные столбцы, поскольку пользователь может выбрать столбцы для возврата в запросе. Я хочу спрятать колонку с личностью. Как скрыть автоматически сгенерированный столбец? Даже в событии с привязкой к данным количество столбцов равно нулю.

Ответы [ 6 ]

14 голосов
/ 15 сентября 2009

Я обнаружил, как это сделать. Вам нужно использовать событие привязки строки и скрывать ячейку, когда строка связана.

Protected Sub ResultGrid_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles ResultGrid.RowDataBound
        e.Row.Cells(1).Visible = False
End Sub
1 голос
/ 02 февраля 2016

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

protected void grd_DataBound(object sender, EventArgs e)
{
    try
    {
        HideAutoGeneratedGridViewColumn(grd, "nContractID");           
    }
    catch (Exception ex)
    {

    }
}

    public int getColumnIndex(GridView grd, string sColumnName)
{
    return getColumnIndex(grd, sColumnName, false);
}
/// <summary>
/// Returns the columns index of the specified column based on the header text.
/// </summary>
/// <param name="grd"></param>
/// <param name="sColumnName"></param>
/// <returns></returns>
public int getColumnIndex(GridView grd, string sColumnName, bool bAutoGeneratedColumn)
{
    int ReturnVal = -1;
    try
    {
        if (grd != null)
        {
            if (!bAutoGeneratedColumn)
            {
                #region Static Columns
                if (grd.Columns.Count > 0)
                {
                    for (int x = 0; x < grd.Columns.Count; x++)
                    {
                        if (grd.Columns[x] != null)
                        {
                            if (grd.Columns[x].HeaderText.ToLower() == sColumnName.ToLower())
                            {
                                ReturnVal = x;
                                break;
                            }
                        }
                    }
                }
                #endregion
            }
            else
            {
                #region AutoGenerated Columns
                if (grd.HeaderRow != null)
                {
                    for (int x = 0; x < grd.HeaderRow.Cells.Count; x++)
                    {
                        if (grd.HeaderRow.Cells[x] != null)
                        {
                            if (grd.HeaderRow.Cells[x].Text.ToLower() == sColumnName.ToLower())
                            {
                                ReturnVal = x;
                                break;
                            }
                        }
                    }
                }
                #endregion
            }
        }
    }
    catch (Exception ex)
    {
        ReturnVal = - 1;
        LogMessage("getColumnIndex(GridView grd, string sColumnName, bool bAutoGeneratedColumn) Error", ex.Message);
    }
    return ReturnVal;
}   
/// <summary>
/// Returns the columns index of the specified column based on the header text.
/// </summary>
/// <param name="sColumnName"></param>
/// <param name="r"></param>
/// <returns></returns>
public int getColumnIndex(string sColumnName, GridViewRow r)
{
    int ReturnVal = -1;
    try
    {
        if (r != null)
        {
            if (r.Cells.Count > 0)
            {
                for (int x = 0; x < r.Cells.Count; x++)
                {
                    if (r.Cells[x] != null)
                    {
                        if (((System.Web.UI.WebControls.DataControlFieldCell)(r.Cells[x])).ContainingField.HeaderText == sColumnName)
                        {
                            ReturnVal = x;
                            break;
                        }
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        ReturnVal = -1;
    }
    return ReturnVal;
}
public void HideAutoGeneratedGridViewColumn(GridView grd, string sColumnName)
{
    HideAutoGeneratedGridViewColumn(grd, getColumnIndex(grd, sColumnName, true));
}
public void HideAutoGeneratedGridViewColumn(GridView grd, int nColumnIndex)
{
    try
    {
        grd.HeaderRow.Cells[nColumnIndex].Visible = false;
        for (int x = 0; x < grd.Rows.Count; x++)
        {
            grd.Rows[x].Cells[nColumnIndex].Visible = false;
        }
    }
    catch (Exception ex)
    {
        LogMessage("HideAutoGeneratedGridViewColumn(GridView grd, int nColumnIndex) Error", ex.Message);
    }
}
1 голос
/ 08 ноября 2012
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[1].Visible = false;
}
0 голосов
/ 16 февраля 2016

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

Protected Sub Gdvisitor_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles Gdvisitor.RowCreated
    If (e.Row.Cells.Count > 1) Then
        e.Row.Cells(1).Visible = False
    End If
End Sub
0 голосов
/ 15 сентября 2009

Вам это нужно? Самым простым было бы не включать его в запрос на выборку.

Если вам это нужно и вы знаете положение столбца:

gridView.Columns[KnownColumnIndex].Visible = false;
0 голосов
/ 15 сентября 2009

Я бы проверил, что столбец больше нуля, в таком случае я бы использовал тот факт, что на коллекцию столбцов можно ссылаться как по имени столбца, так и по целому числу, чтобы установить столбец идентификаторов как скрытый.

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