8
votes

Masquer la colonne autogénérée dans GridView

J'ai une grille de grille qui utilise des colonnes autogénérées, car l'utilisateur peut sélectionner les colonnes à revenir dans une requête. Je veux cacher la colonne avec l'identité. Comment puis-je masquer la colonne autogénérée? Même dans l'événement de Databound, les colonnes comptent nulle.


0 commentaires

6 Réponses :


0
votes

Je vérifierais que la colonne était supérieure à zéro, si oui, j'utiliserais le fait que la collection de colonnes peut être référencée par nom de colonne ainsi que entier pour définir la colonne d'identité sur cachée.


2 commentaires

Les colonnes générées automatiques ne sont pas incluses dans la collection de colonnes.


Faites-le dans l'événement Databound à quel point je suis sûr que les colonnes autogénérées seront dans la collection de colonnes.



0
votes

Avez-vous besoin de ça? La chose la plus simple serait de ne pas l'inclure dans la requête SELECT.

Si vous en avez besoin et connaissez la position de la colonne: xxx


2 commentaires

J'ai besoin que l'indice inclue comme dakey pour sélectionner la ligne.


Cela n'a pas fonctionné pour moi, GridView.Columns.Count est zéro pour les colonnes autogénérées.



14
votes

J'ai découvert comment faire cela. Vous devez utiliser l'événement Rowdatabound et masquer la cellule lorsque la ligne est liée.

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 commentaires

+1, seule chose à surveiller, c'est que vous le changez pour les lignes de rangée appropriées. Par exemple, si (e.row.rowtype! = DatacontrolrowtType.pager) {E.ROW.Cells [1] .Visible = Faux; }



1
votes
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[1].Visible = false;
}

0 commentaires

1
votes

J'ai piraté autour de la question avec ce qui suit. J'ai écrit des fonctions d'assistant pour me donner l'index de colonne correct, puis masquer la colonne souhaitée. Une fois les fonctions d'assistance en place, vous appelez simplement la doublure de la fonction 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);
    }
}


0 commentaires

0
votes

Ceci cachera l'en-tête de colonne autogogenéré et la cellule sans qu'il ne soit pas à la recherche d'une foime comme le databound le fera. C'est la bonne réponse prise de ici

p>

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 commentaires