2009-09-15 12 views
8

ユーザーはクエリで返す列を選択できるため、自動生成された列を使用するgridviewがあります。アイデンティティを持つ列を非表示にしたい自動生成された列を非表示にするにはどうすればよいですか?データバインドされたイベントであっても、列数はゼロです。Gridviewで自動生成された列を非表示にする

答えて

14

を私はこれを行う方法を発見しました。 rowdataboundイベントを使用し、行がバインドされているときにセルを非表示にする必要があります。

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、注目するのは、適切なRowTypesに対して変更することだけです。たとえば、(e.Row.RowType!= DataControlRowType.Pager){e.Row.Cells [1] .Visible = false; } –

0

私は列が0より大きいかどうかを確認したいと思います。その場合、列コレクションを列名と整数で非表示に設定することができます。

+2

から取ら正解です。 – SchwartzE

+0

DataBoundイベントでそれを行います。その時点で、自動生成された列が列コレクション内にあることは間違いありません。 – Lazarus

0

あなたはそれが必要ですか?最も簡単なことは、選択クエリにそれを含まないことです。

あなたがそれを必要と列の位置が分かっている場合:

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

行を選択するためのデータキーとしてインクルードするインデックスが必要です。 – SchwartzE

+0

これは私にとってはうまくいかず、gridView.Columns.Countは自動生成された列に対してゼロです。 – Somebody

1

私は次のように問題を回避ハッキングしてきました。私は、私に正しい列インデックスを与え、その後、必要な列を隠すヘルパー関数を書いています。ヘルパー関数が設定されたら、gridview_databound関数から1つのライナーを呼び出すだけです。

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

これは、自動生成された列見出しとセルを非表示にします。これは、自動列は、列のコレクションに含まれていません生成さ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

関連する問題