2013-10-08 25 views
2

我有以下代碼來隱藏列和編輯列標題。但它沒有成爲習俗。我已經嘗試過將各種方法放入DataBound,RowDataBound,RowCreated事件中。但不工作。如何在設置數據源時在gridview中隱藏列

GridView1.AutoGenerateColumns = true; 
GridView1.DataSource = SomeObject[]; 
GridView1.DataBind(); 

foreach (DataControlField col in GridView1.Columns) 
{ 
    if (col.HeaderText == "FirstName") 
    { 
     col.HeaderText = "First Name"; 
    } 
    if (col.HeaderText == "SchoolName") 
    { 
     col.Visible = false; 
    } 
} 

任何人都可以請指教我修復。當你做AutoGenereateColumns = true

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

,設置使用GridView的RowDataBound事件無形列謝謝

+0

這是否幫助? http://stackoverflow.com/a/3819831/961695 –

+0

不,不想使用硬編碼索引。因爲我想讓它成爲未來的證明。如果索引改變將會中斷。 – user1211185

+0

如果您採取該解決方案並添加此http://stackoverflow.com/a/9716160/961695? –

回答

1

注意columnss計數將在0。

在ASPX頁面,您可以在GridView控件這樣

<asp:GridView runat="server" OnRowDataBound="GridView_RowDataBound" .../> 
1

聲明代替試試這個:

int indexOfSchoolName = -1; 
int columnIndex = -1; 
foreach(TableCell cell in GridView1.HeaderRow.Cells) 
{ 
    columnIndex ++; 
    if (cell.Text == "FirstName") 
    { 
     cell.Text = "First Name"; 
    } 
    if(cell.Text == "SchoolName") indexOfSchoolName = columnIndex; 
} 
if(indexOfSchoolName != -1) 
{ 
    foreach(GridViewRow row in GridView1.Rows) 
    { 
     row.Cells[indexOfSchoolName].Visible = false; 
    } 
} 
+0

感謝Tim,cell.Text在調試時爲空字符串 – user1211185

0

你爲什麼不從SomeObject []刪除該列或克隆,然後取出列?

+0

不想丟失值 – user1211185

+0

此時,@Dusht解決方案似乎是最好的。它使用正確的方法和乾淨的代碼。 –

0

如果SomeObject[]是一個數組,那麼您可能需要嘗試複製一個SomeObject[]來表示CopyObject[],然後操作該數組以排除所需的列。最後重新綁定到你的網格視圖。

0

我常做這樣的事情:

private int GetColumnIndexByName(GridView grid, string name) 
{ 
    foreach (DataControlField col in grid.Columns) 
    { 
     if (col.HeaderText.ToLower().Trim() == name.ToLower().Trim()) 
     { 
      return grid.Columns.IndexOf(col); 
     } 
    } 

    return -1; 
} 

GridView1.Columns[GetColumnIndexByName(GridView1, "SchoolName")].Visible = false; 
+0

與我的代碼有什麼不同? grid.Columns在這裏沒有任何東西。 – user1211185

+0

正如@Dusht所指出的,您需要將AutoGenereateColumns = true移至數據源就位後。 – Bit