找到ID的控件在GridView的动态添加模板场 [英] find a control by id from Dynamically added Template field in GridView
问题描述
您好我通过实现了Itemplate接口动态添加模板领域的GridView。
该模板field包含标签和文本框一些控制。我如何得到这些控件行数据绑定事件。
Hi i added template field dynamically to gridview by implementing ITemplate interface. The template field contains some controls like label and textboxes. how do i get these controls in row databound event.
我不能够得到当我这样做gridviewrow.findcontrol(ID),因为我通常当我们从ASPX页面添加模板列。
I am not able to get when i do gridviewrow.findcontrol("id") as i do normally when we add templatefield from aspx page.
我添加模板字段的方法是这样的。
The way i added template field is like this
公共类CustomGridViewColumn:了Itemplate
{
ListItemType _liType;
串_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;
}
}
}
现在我想访问我已经使用这个code添加标签和下拉列表。
当我做gridviewrow.findcontrol(ID)我没有得到他们。
任何一个可以帮助我。
Now i want access the label and dropdown which i have added using this code. when i do gridviewrow.findcontrol("id") i am not getting them. Can any one please help me.
我geeting当我经历的所有行,并尝试找到,但
我有一排一个复选框,当我选择它的所有标签应diappear和的DDL dhould出现
为了这个,我现在用的是follwoing code。
I am geeting when i go through all the rows and try to find but i have a check box in a row when i select it all labels should diappear and ddls dhould appear for this i am using the follwoing code.
保护无效chkEdit_CheckedChanged(对象发件人,EventArgs的发送)
{
复选框chkEditTest =(复选框)发送;
GridViewRow成长=(GridViewRow)chkEditTest.NamingContainer;
DropDownList的DDL =(DropDownList的)grow.FindControl(DDL);
标签LBL =(标签)grow.FindControl(LBL);
}
当我这样做我不能够得到控制。
它似乎像控件disapppearing上回发。
when i do this i am not able to get the controls. it seems like controls are disapppearing on postback..
推荐答案
这是我想出了,我可以能够得到的code对照参考后面。
This is what I came up with and I can able to get the control reference in the code behind.
public class CustomGridViewColumn : ITemplate
{
ListItemType _liType; string _columnName;
public CustomGridViewColumn(ListItemType type, string column)
{
_liType = type;
_columnName = column;
}
void ITemplate.InstantiateIn(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(lblItem_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;
ddl.DataSource = new string[] { "Hello", "World" };
container.Controls.Add(ddl);
break;
}
}
void ddl_DataBinding(object sender, EventArgs e)
{
}
void lblItem_DataBinding(object sender, EventArgs e)
{
}
}
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("Name");
DataRow oItem = dt.NewRow();
oItem[0] = "Deepu";
dt.Rows.Add(oItem);
oItem = dt.NewRow();
oItem[0] = "MI";
dt.Rows.Add(oItem);
GridView gv = new GridView();
gv.ID = "myGridView";
gv.AutoGenerateColumns = false;
BoundField nameColumn = new BoundField();
nameColumn.DataField = "Name";
nameColumn.HeaderText = "Name";
gv.Columns.Add(nameColumn);
TemplateField TmpCol = new TemplateField();
TmpCol.HeaderText = "Template Column";
gv.Columns.Add(TmpCol);
TmpCol.ItemTemplate = new CustomGridViewColumn(ListItemType.Item, "TEST");
gv.DataSource = dt;
gv.DataBind();
Form.Controls.Add(gv);
}
protected void Button1_Click(object sender, EventArgs e)
{
GridView gv = Form.FindControl("myGridView") as GridView;
foreach (GridViewRow item in gv.Rows)
{
var ddl = item.FindControl("ddlTest") as DropDownList;
if (ddl != null)
{
ddl.Visible = true;
}
var lbl = item.FindControl("lbl") as Label;
if (lbl != null)
{
lbl.Text = "hello";
}
}
}
<form id="form1" runat="server">
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</form>
感谢
Deepu
这篇关于找到ID的控件在GridView的动态添加模板场的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!