2009-09-15 17 views
8

Mam gridview, który używa generowane automatycznie kolumny, ponieważ użytkownik może wybrać kolumny, które mają zostać zwrócone w kwerendzie. Chcę ukryć kolumnę z tożsamością. Jak ukryć automatycznie wygenerowaną kolumnę? Nawet w zdarzeniu databound liczba kolumn wynosi zero.Ukryj automatycznie wygenerowane kolumny w Gridview

Odpowiedz

14

odkryłem jak to zrobić. Musisz użyć zdarzenia rowdatabound i ukryć komórkę po związaniu wiersza.

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 
+4

+1, Jedyną rzeczą, na którą należy zwrócić uwagę, jest to, że zmienisz go dla odpowiednich typów RowTypes. Na przykład jeśli (e.Row.RowType! = DataControlRowType.pager) {e.Row.Cells [1] .Visible = false; } –

0

Sprawdziłbym, czy kolumna była większa od zera, jeśli tak, to skorzystałbym z faktu, że do kolekcji kolumn można się odwoływać poprzez nazwę kolumny, a także liczbę całkowitą, aby ustawić kolumnę tożsamości na ukrytą.

+2

automatycznie generowane kolumny nie są zawarte w zbiorze kolumny. – SchwartzE

+0

Zrób to w zdarzeniu DataBound, w którym to momencie jestem całkiem pewny, że automatycznie wygenerowane kolumny będą w kolekcji kolumn. – Lazarus

0

Potrzebujesz tego? Najprostszą rzeczą byłoby pominięcie go w kwerendzie wyboru.

Jeśli jest to potrzebne i poznać stanowisko kolumna:

gridView.Columns[KnownColumnIndex].Visible = false; 
+0

Potrzebuję indeks do uwzględnienia jako datakey do wyboru wiersza. – SchwartzE

+0

to nie działa dla mnie, gridView.Columns.Count jest zero dla kolumn Autogenerated. – Somebody

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

Mam hacked wokół problemu z następujących czynności. Napisałem funkcje pomocnicze, aby podać poprawny indeks kolumny, a następnie ukryć żądaną kolumnę. Po uruchomieniu funkcji pomocnika wystarczy wywołać jedną linijkę z funkcji 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

Spowoduje to ukrycie generowanego automatycznie nagłówka kolumny i komórki bez jej pomieszania, tak jak zrobi to databound. To jest poprawna odpowiedź pochodzi z here

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

Powiązane problemy