datalist没有在updatecommand上取值

时间:2013-10-11 05:47:39

标签: c# asp.net .net visual-studio-2008

我有以下代码:

       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此文本框为空,这就是为什么无法使用正确的值进行更新。

请帮帮我。

1 个答案:

答案 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;
    }