2013-01-10 7 views
6

Ho un GridView da cui vorrei ottenere il testo delle intestazioni delle colonne.Ottieni il testo dell'intestazione della colonna GridView - restituisce sempre uno spazio vuoto

for (int j = 0; j < grdToDisplay.HeaderRow.Cells.Count; j++) 
{ 
    string s = grdToDisplay.HeaderRow.Cells[j].Text.ToString(); //Returns "" 
    s = grdToDisplay.HeaderRow.Cells[j].Text; //Returns "" 
    s = grdToDisplay.Rows[0].Cells[j].Text; //Returns text from first row of results not the header 
    // s = grdToDisplay.Columns[j].HeaderText.ToString(); // does not work as column count is 0 
} 

I contenuti GridView vengono generati in fase di esecuzione in base a una query utente. L'intestazione è in grado di ordinare in base al clic.

Come è possibile eseguire il loop di GridView ed elencare il testo dell'intestazione di colonna?

+1

Quando è in esecuzione questo codice, cioè quale evento? – mellamokb

+0

gridview1.Columns [ColumnIndex] .HeaderText = "Testo intestazione"; –

+0

il codice è in esecuzione alla fine del Page_Load – jimmy

risposta

4

È possibile utilizzare GridViewColumn.HeaderText

for (int i = 0; i < grdToDisplay.Columns.Count; i++) 
{ 
    string header = grdToDisplay.Columns[i].HeaderText; 
} 

Edit:

ma questo mi avrebbe dato alcun risultato, come contano le colonne è 0

Allora avete AutoGenerateColumns=true e solo le colonne aggiunte in modo dichiarativo vengono contate. Così utilizzare questo codice dopo aver databound il GridView:

for (int i = 0; i < grdToDisplay.HeaderRow.Cells.Count; i++) 
{ 
    string header = grdToDisplay.HeaderRow.Cells[i].Text; 
} 
+0

Potrebbe non essere chiaro dal mio codice sopra, ma questo non mi darebbe alcun risultato dato che il conteggio delle colonne è 0 – jimmy

+0

Se non ci sono colonne, come potrebbe esserci il testo dell'intestazione della colonna? –

+0

@jimmy: Quindi hai 'AutoGenerateColumns = true' e verranno conteggiate solo le colonne aggiunte in modo dichiarativo. –

2

Dal intestazione del GridView è ordinabile, è possibile ottenere il testo del colpo di testa di LinkButton. Provate questo: inserire il seguente codice nella DataBind del GridView:

for (int i = 0; i < gridView.HeaderRow.Cells.Count; i++) 
      { 

       if (gridView.HeaderRow.Cells[i].HasControls()) 
       { 
        //when gridview is sortable, type of header is LinkButton 
        // Linkbutton is in index 0 of the control 
        if (gridView.HeaderRow.Cells[i].Controls[0] is LinkButton) 
        { 
         LinkButton headerControl = gridView.HeaderRow.Cells[i].Controls[0] as LinkButton; 
         string headerName = headerControl.Text; 

        } 

       } 

      } 
+0

Like it ..condensed down to ((LinkButton) e.Row.Cells [3] .Controls [0]). Testo – RustyH

0

ho creato la mia soluzione basata sulle cose Ive leggere qui e in altri thread .. qui va:

public void HideColumnByName(GridView grid, string header) 
     { 
      if (grid.HeaderRow.HasControls()==true) 
      { 
       for (int i = 0; i < grid.HeaderRow.Cells.Count; i++) 
       { 
        if (grid.HeaderRow.Cells[i].Text == header) 
        { 
         foreach (GridViewRow row in grid.Rows) 
         { 
          row.Cells[i].Visible = false; 
          grid.HeaderRow.Cells[i].Visible = false; 
         } 
        } 

       } 
      } 
     } 

questo metodo in alto nasconde sia le intestazioni che le celle della colonna il cui nome dell'intestazione (o nome della colonna) è il parametro stringa passato al mio metodo ('header' param). Il metodo "HideColumnByName" viene quindi chiamato dall'evento "DataBound" della mia gridview. Semplice. Spero che questo ti aiuti ! Di sicuro ha funzionato per me! :)

+0

Che non ha nulla a che fare con la domanda posta – Fandango68

0

Recentemente mi sono imbattuto in questo stesso problema quando si eseguiva un codice recente, ogni volta che ho provato a ottenere il testo dell'intestazione, esso sarebbe sempre tornato vuoto anche sugli eventi associati ai dati. Sono arrivato alla soluzione solo quando pensavo di provare a convertire l'intestazione in base allo schema di controllo proprio delle colonne.

Si scopre che la visualizzazione a griglia di una finestra consente di trasformare il testo dell'intestazione in qualcos'altro, rendendo impossibile ottenere semplicemente le informazioni dall'intestazione senza convertirle. La mia soluzione al problema era semplicemente quella di non essere ordinabile quando ho chiesto il testo, ma supponendo che non sia possibile ho trovato la soluzione per ottenere il testo anche mentre è ordinabile in un'altra discussione:

ASP.NET GridView header row text empty when AllowSorting enabled

0

enter image description here
il testo dell'intestazione restituisce il nome depositato se la base della colonna modello su dati source

  • GridView.Columns (i).HeaderText

ma se ciò che è necessario per ottenere il testo di intestazione per la colonna prima utilizzare quella linea

  • GridView.HeaderRow.Cells (i) .Text

questo link può help you Get Header Text of Gridview Cell