如果你想隱藏一個邏輯上的列基,你想使用RowDataBound。
未來有點容易維護。
下面是示例。您可以隱藏或顯示您喜歡的任何列。
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"
AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="EmpID" DataField="EmpID" />
<asp:TemplateField HeaderText="EmpName" >
<ItemTemplate>
<asp:Label runat="server" ID="EmpNameLabel"
Text='<%# Eval("EmpName") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="UnitID" DataField="UnitID" />
<asp:TemplateField HeaderText="UnitName" >
<ItemTemplate>
<asp:Label runat="server" ID="UnitNameLabel"
Text='<%# Eval("UnitName") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
public class Employee
{
public int EmpID { get; set; }
public string EmpName { get; set; }
public int UnitID { get; set; }
public string UnitName { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
GridView1.DataSource = new List<Employee>
{
new Employee { EmpID = 1, EmpName = "One", UnitID = 100, UnitName = "One hundred"},
new Employee { EmpID = 2, EmpName = "Two", UnitID = 200, UnitName = "Two hundred"},
new Employee { EmpID = 3, EmpName = "Three", UnitID = 300, UnitName = "Three hundred"},
new Employee { EmpID = 4, EmpName = "Four", UnitID = 400, UnitName = "Four hundred"}
};
GridView1.DataBind();
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var employee = e.Row.DataItem as Employee;
var empNameLabel = e.Row.FindControl("EmpNameLabel") as Label;
var unitNameLabel = e.Row.FindControl("UnitNameLabel") as Label;
if (employee.UnitID == 200)
{
empNameLabel.Visible = false;
unitNameLabel.Visible = false;
}
}
}
來源
2013-05-21 22:43:03
Win
您也可以隱藏在綁定事件像e.Row.Cells行數據細胞/頭細胞[1] .Visible = false; GridView1.HeaderRow.Cells [1]。Visible = false;我只是喜歡在綁定後調用它 – clamchoda
謝謝。我用你和@Win的幫助解決了我的問題。我有一個關於gridview的小問題。我添加了新的命令字段到我的gridview選擇。它顯示在第一個列。我想把它傳遞給最新的專欄。那麼我該如何實現它。我可以使用Displayindex,但這個列沒有標題行。 – one1day