2013-03-04 130 views
3

似乎是一個常見問題。隱藏GridView ID列

我想隱藏我的GridView的一列。我已經讀過,只需將列設置爲'visible = false'將不起作用,因爲我正在自動生成我的數據。

目前我的代碼表示像這樣:

protected void Page_Load(object sender, EventArgs e) 
    { 
     bind(); 

     if (GridView1.Columns.Count > 0) 
      GridView1.Columns[0].Visible = false; 
     else 
     { 
      GridView1.HeaderRow.Cells[0].Visible = false; 
      foreach (GridViewRow gvr in GridView1.Rows) 
      { 
       gvr.Cells[1].Visible = false; 
      } 
     } 

    } 

的「如果」語句不會觸發如如說我是自動生成的數據。通過上面的循環,我可以隱藏列的標題文本,但希望隱藏整個列,並且仍然能夠訪問隱藏的數據。

回答

4

如何只是這樣做以後在控件的生命週期(列集合已填充時):

protected void GridView1_PreRender(object sender, EventArgs e) 
{ 
    if (GridView1.Columns.Count > 0) 
     GridView1.Columns[0].Visible = false; 
    else 
    { 
     GridView1.HeaderRow.Cells[0].Visible = false; 
     foreach (GridViewRow gvr in GridView1.Rows) 
     { 
      gvr.Cells[1].Visible = false; 
     } 
    } 
} 

注意:您需要添加OnPreRender="GridView1_PreRender"到你的GridView的標記。

+0

感謝您的回答。我已經看到了這個方法,但我不知道我應該以對象和eventArgs的形式提供給該方法嗎?這個'其他'不只是隱藏它觸發的細胞headerif?因爲我不希望發生這種情況,所以要隱藏整個列 – user1352057 2013-03-04 20:17:15

+0

@ user1352057您不需要提供任何東西。如果添加我在最後提到的標記,事件將自動「掛鉤」。 Re:'else'這個東西,我只是複製了你的代碼。如果你不想讓else隱藏header,儘量不要這麼做。 – jadarnel27 2013-03-04 20:19:22

+0

再次感謝您的幫助。當你提到onprerender時。我需要在我的onload中聲明這個嗎?我曾嘗試添加它,但目前出現錯誤。 – user1352057 2013-03-04 21:32:12

0

啊......所以問題是沒有預定義列。

也許你可以使用LINQ到選中所有要顯示的列:

gvTest.DataSource = (from d in dataSource 
        select new 
        { 
         ColumnA = d.ColumnA... 
        } 

或者,你可以隱藏的JavaScript中的列;

+0

我想這已經發生在呼叫幕後'bind()的;在OPS Page_Load方法的第一行'。 – jadarnel27 2013-03-04 20:11:41

+0

@ jadarnel27我認爲他的意思是在標記中。 – Narnian 2013-03-04 20:13:40

+0

@Narnian。是的bind()調用填充gridview的方法。# – user1352057 2013-03-04 20:14:59

0

這是自動生成列的限制。爲了方便不預先定義列,您放棄了很多控制列的顯示方式。

立即咬住子彈並定義您的列。如果這是您需要製作的唯一定製,那麼您可能會好起來,但是90 +%的時間我最終定義了列以定製它們的顯示方式。

否則,你將最終得到幾種在各種情況下容易中斷的「調整」(例如,數據源中列的順序改變)。

+0

@D Stanley謝謝你的回答。你的意思是預定義他們的服務器端? – user1352057 2013-03-04 20:19:43

+0

不,您可以在標記中定義它們。設計師應該給你屏幕以在設計時添加列。 – 2013-03-04 20:24:42

1

爲什麼不使用GridView.DataKeyNamesGridView.DataKeys屬性來存儲ID,然後使用rowIndex檢索它?這也會阻止列自動生成。

DataKeyNames

DataKeys