请帮助, 我有用户控件,其中包含GridView,我在GridView RowCreated事件中隐藏其列:
private void gvGrid_RowCreated(object sender, GridViewRowEventArgs e)
{
foreach (TableCell objCell in e.Row.Cells)
{
if (objCell is DataControlFieldHeaderCell)
{
objCell.Visible = false;
}
}
}
现在一切正常,但是在ASPX Page Postback(包含Griview UserControl)上,显示了所有隐藏的列,我的PageLoad如下所示
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ucGridView.PopulatePage();
}
}
注意:如果我删除,ASPX页面开始正常工作!IsPostBack Check ..但我不想要这个...问题是什么......!
答案 0 :(得分:2)
您需要使用RowDataBound事件处理程序而不是RowCreated。
答案 1 :(得分:1)
您确定需要在代码隐藏中隐藏列吗?
如果您只需要在网格中存储字段值但不显示它们,那么GridView控件的Microsoft recommends using the DataKeyNames property就会显示。
您可以直接从GridView中删除绑定字段,并在DataKeyNames属性中指定它们,而不是使用代码隐藏来隐藏某些列:
<asp:GridView ID="GridView1" runat="server"
DataKeyNames="SalesOrderID,SalesOrderDetailID"
DataSourceID="LinqDataSource1">
这样,字段不会显示给用户,但GridView知道要保留值以进行更新等。
答案 2 :(得分:1)
默认情况下,您的列在网格中可见,而您在页面未回发时隐藏
if (!IsPostBack)
{
ucGridView.PopulatePage();
}
所以
technically ucGridView.PopulatePage(); is only beign called once thats why when you remove
!IsPostBack is works fine.
答案 3 :(得分:0)
如果在RowDataBound中使用,则无法访问gridview列值