こんにちは、ITemplate インターフェイスを実装して、テンプレート フィールドを gridview に動的に追加しました。テンプレート フィールドには、ラベルやテキスト ボックスなどのコントロールが含まれています。行データバインド イベントでこれらのコントロールを取得するにはどうすればよいですか。
aspx ページから templatefield を追加するときに通常行うように、 gridviewrow.findcontrol("id") を実行すると取得できません。
テンプレートフィールドを追加する方法は次のとおりです
public class CustomGridViewColumn : ITemplate
{
ListItemType _liType;
string _columnName;
public CustomGridViewColumn(ListItemType type, string column)
{
_liType = type;
_columnName = column;
}
void ITemplate.InstantiateIn(System.Web.UI.Control container)
{
switch (_liType)
{
case ListItemType.Header:
Label lblHeader = new Label();
lblHeader.Text = _columnName;
container.Controls.Add(lblHeader);
break;
case ListItemType.Item:
Label lblItem = new Label();
lblItem.DataBinding += new EventHandler(lbl_DataBinding);
lblItem.ID = "lbl" + _columnName;
lblItem.ClientIDMode = ClientIDMode.Predictable;
container.Controls.Add(lblItem);
DropDownList ddl = new DropDownList();
ddl.DataBinding += new EventHandler(ddl_DataBinding);
ddl.ID = "ddl" + _columnName;
ddl.Visible = false;
container.Controls.Add(ddl);
break;
}
}
}
今、このコードを使用して追加したラベルとドロップダウンにアクセスしたいと思います。gridviewrow.findcontrol("id") を実行すると、取得できません。誰でも私を助けてください。
すべての行を調べて見つけようとすると、私はうんざりしていますが、それを選択すると行にチェックボックスがあり、すべてのラベルが消え、ddls が表示されます。これには、次のコードを使用しています。
protected void chkEdit_CheckedChanged(object sender, EventArgs e)
{
CheckBox chkEditTest = (CheckBox)sender;
GridViewRow grow = (GridViewRow)chkEditTest.NamingContainer;
DropDownList ddl = (DropDownList)grow.FindControl("ddl");
Label lbl= (Label)grow.FindControl("lbl");
}
これを行うと、コントロールを取得できません。ポストバックでコントロールが消えているようです..