2013-01-10 11 views
6

Ich habe eine GridView, die ich möchte den Text der Spaltenüberschriften erhalten.Holen Sie den GridView Column Header Text - immer leer

Die GridView-Inhalte werden zur Laufzeit basierend auf einer Benutzerabfrage generiert. Der Header ist click-fähig zum Sortieren.

Wie kann ich die GridView Schleife und den Spaltenkopftext auflisten?

+1

Wann läuft dieser Code, also welches Ereignis? – mellamokb

+0

gridview1.Columns [ColumnIndex] .HeaderText = "Kopftext"; –

+0

der Code läuft am Ende des Page_Load – jimmy

Antwort

4

können Sie verwenden GridViewColumn.HeaderText

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

bearbeiten:

aber das würde mir keine Ergebnisse geben, wie die Säulen Anzahl 0 ist

Dann haben Sie AutoGenerateColumns=true und nur deklarativ hinzugefügte Spalten werden gezählt. So verwenden Sie diesen Code nach Sie die GridView datengebundene haben:

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

Es ist vielleicht nicht klar aus meinem Code oben, aber dies würde mir keine Ergebnisse geben, da die Anzahl der Spalten 0 ist – jimmy

+0

Wenn es keine Spalten gibt, wie könnte es Spalte HeaderText sein? –

+0

@jimmy: Dann haben Sie 'AutoGenerateColumns = true' und nur deklarativ hinzugefügte Spalten würden gezählt werden. –

2

Da Header von Gridview sortierbar ist, können Sie den Text des Headers von Linkbutton erhalten. versuchen diese: den folgenden Code in der DataBind des 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

Wie es ..condensed es auf ((LinkButton) e.Row.Cells [3] .Controls [0]). Text – RustyH

0

habe ich meine eigene Lösung basierend auf Dinge Ich habe gelesen, hier und in anderen Threads .. hier geht es:

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

       } 
      } 
     } 

Diese Methode verbirgt sowohl die Header als auch die Zellen der Spalte, deren Header-Name (oder Spaltenname) der String-Parameter ist, der an meine Methode übergeben wird ('header' param). Die Methode "HideColumnByName" wird dann vom "DataBound" -Ereignis meiner Gridview aufgerufen. Einfach. Hoffe das hilft ! Es hat sicher für mich funktioniert! :)

+0

Das hat nichts mit der Frage zu tun – Fandango68

0

Ich stieß vor kurzem auf dieses Problem, wenn einige neuere Codierung, zu jeder Zeit ich versuchte, den Header-Text es würde immer leer, auch auf Daten gebunden Ereignisse. Ich kam nur zu der Lösung, als ich dachte, ich würde versuchen, den Header basierend auf dem eigenen Steuerschema der Spalten zu konvertieren.

Es stellt sich heraus, dass eine sortierbare Gridview den Headertext in etwas anderes verwandelt, was es unmöglich macht, einfach die Informationen aus dem Header zu erhalten, ohne sie zu konvertieren. Meine eigene Lösung des Problems bestand darin, es einfach nicht sortierbar zu machen, wenn ich nach dem Text fragte, aber angenommen, dass das nicht möglich ist, stieß ich auf die Lösung, den Text zu erhalten, während er in einem anderen Thread sortierbar ist:

ASP.NET GridView header row text empty when AllowSorting enabled

0

enter image description here
der Kopftext der eingereichten Namen, wenn Vorlagenspalte Basis auf Datenquelle

  • GridView.Columns (i) zurück.Header

aber wenn das, was Sie Kopftext für Spalte erhalten zuerst die Zeile

verwenden müssen
  • GridView.HeaderRow.Cells (i) .Text

Link kann help you Get Header Text of Gridview Cell