GridViewのItemTemplateの状態を知りたい
GridViewのItemTemplateのVisibleを動的にfalseにしようとした場合。
通常であれば、これだけでOK
TemplateField tm = gvSamples.Columns.OfType<TemplateField>() .Where(f => f.HeaderText == "カラム1") .FirstOrDefault(); tm.Visible = false;
この後、このカラムには動的にJavascriptを生成するCustomTextがあったために
カラムの中のTextBoxもVisible=falseにしたくてはまった。
(1)DataBoundの中で、特定のControlをFindControlする箇所があったので、
そこで一緒にできるといいなーと思って下記に
(2)ControlのParentのVisibleを見ればよいと思ったら、DataControlFieldCellのVisibleではわからないことが判明
(3)違いはこんな感じとなりました。DataControlFieldとDataControlFieldCellを結ぶのはContainingFieldでした。
・isVisibleCell は Visibleがtrue
・isVisibleItemTemplateField はVisibleがちゃんとfalse
protected void gvSamples__DataBound(object sender, EventArgs e) { foreach (GridViewRow gvr in ((CGridView)sender).Rows) { if (!DataControlRowType.DataRow.Equals(gvr.RowType)) return; TextBox txt = ((TextBox)gvr.FindControl("txtTest")); bool isVisibleItemTemplateField = ((DataControlFieldCell)txt.Parent).ContainingField.Visible; bool isVisibleCell = txt.Parent.Visible; } }