首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在EditItemTemplate内部的ControlParameter中找不到控件

在EditItemTemplate内部的ControlParameter中找不到控件
EN

Stack Overflow用户
提问于 2012-05-21 23:15:45
回答 6查看 22.5K关注 0票数 12

我在一个动态数据网站上工作,我撞到了一堵墙。我有一个详细信息页面,其中可以看到每个员工的详细信息,然后我有一个单独的页面来编辑每个员工。我这样做是因为我需要在每个部门的部门和工作中使用DropDownList框。尽管如此,我在访问department ddl时遇到了问题,我认为这是因为它在EditItemTemplate中。这就是我所拥有的:

代码语言:javascript
复制
<asp:DetailsView ID="dvEmployee" 
                    DataSourceID="EmpDVds" 
                    AutoGenerateRows="false" 
                    DataKeyNames="Id" 
                    GridLines="None" 
                    CellSpacing="10" 
                    runat="server" DefaultMode="Edit">
                    <Fields>
                        <asp:TemplateField HeaderStyle-Font-Bold="true" HeaderText="Department: ">
                            <EditItemTemplate>
                                <asp:DropDownList ID="ddlDept" DataSourceID="DeptDDLds" DataTextField = "DepartmentName" DataValueField = "Id" runat="server" SelectedValue='<%#Bind("DeptID") %>' />
                            </EditItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderStyle-Font-Bold="true" HeaderText="Job Code: ">
                            <EditItemTemplate>
                                <asp:DropDownList ID="ddlJob" DataSourceID="JobDDLds" DataTextField = "JobName" DataValueField = "Id" runat="server" />
                            </EditItemTemplate>
                        </asp:TemplateField>
                    </Fields>

然后,我尝试使用ddlDept SelectedValue来填充ddlJob。这是我正在尝试使用的DataSource。

代码语言:javascript
复制
<asp:SqlDataSource ID="JobDDLds"
                    SelectCommand="
                        SELECT 
                        Id, 
                        Code+' - '+[Desc] AS JobName,
                        Department_Id 
                        FROM 
                        JobCodes 
                        WHERE
                        JobCodes.Department_Id = @DeptID"
                    ConnectionString="<%$ConnectionStrings:TrainingDatabaseConnection %>" runat="server" >
                        <SelectParameters>
                            <asp:ControlParameter ControlID="ddlDept" PropertyName="SelectedValue"
                                    Name="DeptID" Type="Int32" />
                        </SelectParameters>
                    </asp:SqlDataSource>

我知道选择参数的格式是正确的,因为我使用了另一个ddl来填充DetailsView;我知道部门和JobCodes之间的关系是正确的,因为我在和AddEmployee页面中成功地使用了它。

下面是我得到的错误:

在ControlParameter 'DeptID‘中找不到控件'ddlDept’。

我假设它不能通过它的ID访问EditItemTemplate中的ddlDept,这是正确的吗?我该如何解决这个问题呢?关于如何实现这一点的其他建议?任何和所有的帮助都非常感谢。

EN

回答 6

Stack Overflow用户

发布于 2012-07-25 23:40:42

我发现这个链接有助于在没有服务器端的情况下解决问题:Solving the error "Could not find control 'xxx' in ControlParameter 'xxx'."

作者说您可以使用美元字符($)来访问内部控件。

例如:

ControlID="dvEmployee$ddlDept"

将获取dvEmployee的内部控件ddlDept的值

票数 19
EN

Stack Overflow用户

发布于 2012-05-21 23:44:40

您的假设是正确的;<ControlParameter>无法识别您的ddlDept,因为它位于不同的ContentTemplate中。

解决这个问题的一种方法是从标记中删除<ControlParameter>,然后在运行时以编程方式添加它,这样您就可以使用ddlDept的实际UniqueID属性。

如下所示:

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // Create your ControlParameter
        ControlParameter deptParam = new ControlParameter();
        deptParam.ControlID = ddlDept.UniqueID;
        deptParam.PropertyName = "SelectedValue";
        deptParam.Name = "DeptID";
        deptParam.Type = TypeCode.Int32;
        // Add it to your SelectParameters collection
        JobDDLds.SelectParameters.Add(deptParam);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2015-06-28 10:55:02

我发现一种在DetailsView或GridView控件的上下文中查找控件的数据源对象解决此问题的方法是,将数据源控件实际放置在具有您希望引用的控件的item/edit item模板中。这可能不是适用于所有情况的理想方法,但它确实有效。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10687972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档