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. P>
6 Réponses :
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. P>
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.
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: p>
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.
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, 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; }
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { e.Row.Cells[1].Visible = false; }
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); } }
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