我有以下代码:
protected void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack) {
bindList();
}
}
protected void dlAgents_EditCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
dlAgents.EditItemIndex = e.Item.ItemIndex;
bindList();
}
protected void dlAgents_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem | e.Item.ItemType == ListItemType.Item) {
((Label)e.Item.FindControl("lblName")).Text = e.Item.DataItem("AgentName");
((Label)e.Item.FindControl("lblAddress")).Text = e.Item.DataItem("Address");
((Label)e.Item.FindControl("lblContactNo")).Text = e.Item.DataItem("ContactNo");
((LinkButton)e.Item.FindControl("lnkLoginID")).Text = e.Item.DataItem("LoginEmailID");
}
}
protected void dlAgents_UpdateCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
GC.ExecuteCommand("update AgentMaster set Address='" + ((TextBox)e.Item.FindControl("txtAddress")).Text + "' , ContactNo='" + ((TextBox)e.Item.FindControl("txtContact")).Text + "' where agentid='" + e.CommandArgument + "'");
dlAgents.EditItemIndex = -1;
bindList();
}
在此代码中,对于updatecommand,它总是为文本框取空白值。例如。 (TextBox)e.Item.FindControl("txtAddress")).Text
此文本框为空,这就是为什么无法使用正确的值进行更新。
请帮帮我。
答案 0 :(得分:1)
如果在ItemTemplate中你直接使用这些控件,那么这样可以正常工作,但如果没有,那么就不行。据我所知,FindControl方法不是递归的。
尝试使用此方法查找控件:
public static Control FindControlRecursive(Control control, string id)
{
if (control == null) return null;
Control c = control.FindControl(id);
if (c == null)
{
foreach (Control child in control.Controls)
{
c = FindControlRecursive(child, id);
if (c != null) break;
}
}
return c;
}