按类型获取控件的所有子控件的列表

2024-02-05

我试图创建一个方法来创建一个列表,其中包含 DetalsView 的所有字符串类型的子控件的名称。

我得到的最接近的是:

            foreach (Control c in dv.Controls)
            {
                if (c is Label)
                {
                    controlsToCheck.Add(c.ID);
                }
            }

            foreach (string s in controlsToCheck)
            {
                Label lbl = (Label)dv.FindControl(s);
                if (lbl.Text == "")
                {
                    lbl.Text = "None";
                    lbl.CssClass = "bold";
                }
            }

然而,这一切所做的只是在第一个 foreach 中迭代一次,然后退出(即 dv.Controls 仅返回一个项目)。如果我使用 FindControl,我可以访问这些项目,但这意味着我必须为每个项目执行此操作。

有什么想法吗?

Thanks!

编辑:这是我的详细信息视图(我删除了一些内容,其中只有更多控件,以便它适合页面):

        <asp:DetailsView DefaultMode="ReadOnly" FieldHeaderStyle-CssClass="dwHeader" CssClass="marginLeftRightBottom10px"
            AutoGenerateDeleteButton="true" AutoGenerateEditButton="true" GridLines="None"
            ID="dvIndividualItem" runat="server" AutoGenerateRows="False" DataSourceID="sqldsSingleItem"
            OnDataBound="dvIndividualItem_DataBound">
            <Fields>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <h1>
                            Item Name:</h1>
                        <p>
                            The name of the item.</p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblItemName" Text='<%# Bind("itemName") %>'></asp:Label>
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox runat="server" ID="tbItemName"></asp:TextBox>
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <h1>
                            Item Description:</h1>
                        <p>
                            The description of the item.</p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblItemDescription" Text='<%# Bind("itemDescription") %>'></asp:Label>
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox runat="server" ID="tbItemDescription"></asp:TextBox>
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <h1>
                            Item Image:</h1>
                        <p>
                            The image of the item.</p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Image runat="server" ID="imgItem" Width="40px" Height="40px" />
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ReadOnly="true" runat="server" ID="tbItemImage"></asp:TextBox>
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <h1>
                            Item Type:</h1>
                        <p>
                            Specifies the item type.</p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblItemType" Text='<%# Eval("itemType") %>' runat="server" />
                    </ItemTemplate>
                    <%--                            <InsertItemTemplate>
                        <asp:DropDownList AutoPostBack="true" OnSelectedIndexChanged="ddlItemTypes_SelectedIndexChanged"
                            DataTextField="itemType" DataValueField="typeId" DataSourceID="sqldsTier1Category"
                            ID="ddlItemTypes" runat="server">
                        </asp:DropDownList>
                        <asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:myDbConnection%>" ID="sqldsTier1Category"
                            runat="server" SelectCommand="dbo.getItemCategories" SelectCommandType="StoredProcedure">
                        </asp:SqlDataSource>
                    </InsertItemTemplate>--%>
                </asp:TemplateField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <h1>
                            Item SubType:</h1>
                        <p>
                            Specifies the sub-item type.</p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblSubItemType" Text='<%# Eval("itemSubType") %>' runat="server" />
                    </ItemTemplate>
                    <%--                            <InsertItemTemplate>
                        <asp:DropDownList OnDataBound="ddlItemSubTypes_OnDataBound" AutoPostBack="true" DataTextField="itemSubType"
                            DataValueField="subTypeId" DataSourceID="sqldsTier2Category" ID="ddlItemSubTypes"
                            runat="server">
                        </asp:DropDownList>
                        <asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:myDbConnection%>" ID="sqldsTier2Category"
                            runat="server" SelectCommand="dbo.getItemSubCategories" SelectCommandType="StoredProcedure">
                            <SelectParameters>
                                <asp:ControlParameter ControlID="dwNewItem$ddlItemTypes" Name="typeId" PropertyName="SelectedValue"
                                    DbType="Int16" />
                            </SelectParameters>
                        </asp:SqlDataSource>
                    </InsertItemTemplate>--%>
                </asp:TemplateField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <h1>
                            Item SubSubType:</h1>
                        <p>
                            Specifies the sub-sub-item type.</p>
                        <p>
                            <i>Not always applicable.</i></p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblSubSubItemType" Text='<%# Eval("itemSubSubType") %>' runat="server" />
                    </ItemTemplate>
                    <%--                            <InsertItemTemplate>
                        <asp:DropDownList DataTextField="itemSubSubType" DataValueField="subSubTypeId" DataSourceID="sqldsTier3Category"
                            ID="ddlItemSubSubTypes" runat="server">
                        </asp:DropDownList>
                        <asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:myDbConnection%>" ID="sqldsTier3Category"
                            runat="server" SelectCommand="dbo.getItemSubSubCategories" SelectCommandType="StoredProcedure">
                            <SelectParameters>
                                <asp:ControlParameter ControlID="dwNewItem$ddlItemSubTypes" Name="subTypeId" PropertyName="SelectedValue"
                                    DbType="Int16" />
                            </SelectParameters>
                        </asp:SqlDataSource>
                    </InsertItemTemplate>--%>
                </asp:TemplateField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <h1>
                            Requires Sword Swinger Class?</h1>
                        <p>
                            Specifies whether the item can only be used by the Sword Swinger.</p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="cbReqSwordSwinger" Text='<%# Bind("requiresSwordSwinger") %>' runat="server" />
                    </ItemTemplate>
                    <%--                            <InsertItemTemplate>
                        <asp:CheckBox runat="server" ID="cbReqSwordSwinder" />
                    </InsertItemTemplate>--%>
                </asp:TemplateField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <h1>
                            Requires Rat Catcher Class?</h1>
                        <p>
                            Specifies whether the item can only be used by the Rat Catcher.</p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="cbReqRatCatcher" Text='<%# Bind("requiresRatCatcher") %>' runat="server" />
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <asp:CheckBox runat="server" ID="cbReqRatCatcher" />
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <h1>
                            Requires Spell Mumbler Class?</h1>
                        <p>
                            Specifies whether the item can only be used by the Spell Mumbler.</p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="cbReqSpellMumbler" Text='<%# Bind("requiresSpellMumbler") %>' runat="server" />
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <asp:CheckBox runat="server" ID="cbReqSpellMumbler" />
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-CssClass="colorBlue dwHeader">
                    <HeaderTemplate>
                        <h1>
                            Strength permanently added:</h1>
                        <p>
                            Specifies the amount of strength the item permanently adds to your character.</p>
                        <p>
                            <i>Only available when the item is set to type "Consumable"</i></p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblPermanentStrength" Text='<%# Bind("permanentStrength") %>' runat="server" />
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox Enabled="false" runat="server" ID="tbItemPermanentStr"></asp:TextBox>
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-CssClass="colorBlue dwHeader">
                    <HeaderTemplate>
                        <h1>
                            Agility permanently added:</h1>
                        <p>
                            Specifies the amount of agility the item permanently adds to your character.</p>
                        <p>
                            <i>Only available when the item is set to type "Consumable"</i></p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblPermanentAgility" Text='<%# Bind("permanentAgility") %>' runat="server" />
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox Enabled="false" runat="server" ID="tbItemPermanentAgl"></asp:TextBox>
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-CssClass="colorBlue dwHeader">
                    <HeaderTemplate>
                        <h1>
                            Magical Power permanently added:</h1>
                        <p>
                            Specifies the amount of magical power the item permanently adds to your character.</p>
                        <p>
                            <i>Only available when the item is set to type "Consumable"</i></p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblPermanentMagicalPower" Text='<%# Bind("permanentMagicalPower") %>'
                            runat="server" />
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox Enabled="false" runat="server" ID="tbItemPermanentMP"></asp:TextBox>
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-CssClass="colorBlue dwHeader">
                    <HeaderTemplate>
                        <h1>
                            Health Points restored:</h1>
                        <p>
                            Specifies the amount of health points the item restores.</p>
                        <p>
                            <i>Only available when the item is set to type "Consumable"</i></p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblHPRestored" Text='<%# Bind("restoresHealthPoints") %>' runat="server" />
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox Enabled="false" runat="server" ID="tbItemRestoresHp"></asp:TextBox>
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-CssClass="colorBlue dwHeader">
                    <HeaderTemplate>
                        <h1>
                            Mana Points restored:</h1>
                        <p>
                            Specifies the amount of mana points the item restores.</p>
                        <p>
                            <i>Only available when the item is set to type "Consumable"</i></p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblManaRestored" Text='<%# Bind("restoresMana") %>' runat="server" />
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox Enabled="false" runat="server" ID="tbItemRestoresMana"></asp:TextBox>
                    </InsertItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderStyle-CssClass="colorBlue dwHeader">
                    <HeaderTemplate>
                        <h1>
                            Health Points permanently added:</h1>
                        <p>
                            Specifies the amount of health points the item permanently adds to your character.</p>
                        <p>
                            <i>Only available when the item is set to type "Consumable"</i></p>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblPermanentHP" Text='<%# Bind("permanentHealth") %>' runat="server" />
                    </ItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox Enabled="false" runat="server" ID="tbItemPermanentHP"></asp:TextBox>
                    </InsertItemTemplate>
                </asp:TemplateField>
            </Fields>
        </asp:DetailsView>

Try this

    public static IEnumerable<Control> GetAllControls(Control parent)
    {
        foreach (Control control in parent.Controls)
        {
            yield return control;
            foreach (Control descendant in GetAllControls(control))
            {
                yield return descendant;
            }
        }
    }

and call

List<Control> ControlsToCheck = GetAllControls(dv).OfType<Label>().ToList();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按类型获取控件的所有子控件的列表 的相关文章

随机推荐

  • 通过命令行运行 JAR 时出现错误 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    我有一个正在使用的java程序mysql数据库连接代码 我已经添加了mysql connector java 3 0 10 stable bin jar and mysql connector java 5 0 4 bin jar我的 ec
  • 使用servlet,如何从数据库下载多个文件并将它们压缩以供客户端下载

    我有一个 jsp servlet Web 应用程序 客户端可以通过下拉框选择 课程 和 作业 然后单击按钮下载数据库中该课程 作业组合下列出的所有文件 servlet 代码不太工作 因为 zip 文件没有作为附件发送到浏览器 我确实有一次下
  • 如何在 Interface Builder 中输入 RGB 值?

    如何在 Interface Builder 中输入背景的 RGB 或 Hex 颜色值 我可以选择预定义的颜色 但我想手动输入 RGB 值 我可以在哪里执行此操作 单击颜色滑块图标 然后从下拉列表中选择 RGB 滑块 您还可以使用放大镜作为颜
  • 有没有办法使用 Jquery 检测跨浏览器按下后退按钮

    我有一个正在幻灯片放映的网站 当用户按下后退按钮时 我希望它返回到相册视图而不是先前的页面并阻止页面 有办法做到这一点吗 感谢您的任何帮助或建议 jQuery Address 为浏览器历史记录和 Ajax 抓取提供了强大的跨浏览器支持 ht
  • Apache Rewritemap 未被读取?

    我有一个简单的键值映射文件 它将旧用户 ID 转换为新用户 ID 目标是从旧网站拉出会员个人资料页面 并重定向到新网站 其中会员拥有新的用户 ID 我的虚拟主机配置文件是这样的
  • 更改 TabControl 未使用空间的颜色

    我想更改 TabPage 标题右侧未使用空间的颜色 我试图覆盖OnPaintBackground窗口的方法并且它正在工作 这是我使用的代码 protected override void OnPaintBackground PaintEve
  • 无法找到速度模板资源

    只是一个基于 Maven 结构的简单速度独立应用程序 这是用 Scala 编写的用于渲染模板的代码片段helloworld vm in basedir src main resources文件夹 com ggd543 velocitydem
  • Python 中的货币格式

    我希望使用 Python 将 188518982 18 等数字格式化为 188 518 982 18 我怎样才能做到这一点 See the locale https docs python org 3 library locale html
  • Excel ActiveX 列表框随着每次更新而缩小

    我有一组链接的子程序 其工作原理如下 用户在 ActiveX 文本框中键入内容 该文本框中的更改事件调用模块中的子组件 该模块子驱动器更新工作表中的命名范围 范围值驱动更新使用基于范围值的查找函数的 Excel 单元格表 表值被复制并粘贴到
  • 如何从 flutter 应用程序打开 Instagram?

    当我点击按钮时 我想切换到 Instagram 个人资料 我使用这个库网址启动器 https pub dev packages url launcher 但我只能使用网络浏览器来实现此目的 为了实现我的目标 我要做什么 要打开本机和 Web
  • 计算输入字符 - 使用 onkeyup 还是 onkeydown?

    我需要为用户设置最大字符输入 类似于 stackoverflow com 的工作方式 我计划使用 javascript 向用户提供反馈并计算字符数 仅允许提交不超过最大字符数的内容 我不打算使用 xhtml 输入属性来限制此数量 因为只要不
  • C# 中带有圆角边框的表单? [复制]

    这个问题在这里已经有答案了 我使用此代码使表单没有边框样式 this FormBorderStyle FormBorderStyle None 我需要在表格上制作圆角边缘 有简单的方法吗 我该怎么做 看看这个 http msdn micro
  • 水豚 & RSpec

    我无法让水豚成功工作 它抱怨说has text是一个未定义的方法 我创建了一个新的 Rails 3 1 项目 rails new test T Gemfile source http rubygems org gem rails 3 1 3
  • 从 Java 调用 PLSQL 过程

    下面是我的Java程序 我正在调用 PLSQL 过程来更新员工姓名 我关闭了 PLSQL 代码中的提交 以便可以从 Java 代码进行提交和回滚 但即使在我关闭自动提交并执行显式回滚之后 表中的详细信息仍然会更新 如何 我不知道 请帮忙 这
  • 我可以在没有特定 NSManagedObjectContext 的情况下创建 NSManagedObject 实例吗?

    我正在构建一个应用程序 它从 Web API 接收大量列表 并允许用户保存一些列表以供离线查看 我通常的做法是 从API获取数据 并为每个数据创建一个新的Listing对象 如果用户选择将对象保存到数据库中 但这是一个核心数据应用程序 因此
  • java中零的情况下的负号

    有没有办法在结果返回零时截断负号 使用十进制格式时 DecimalFormat df new DecimalFormat 0 0 df setRoundingMode RoundingMode HALF UP formattedValue
  • 如何使用 Django 将 HTML 页面转换为 PDF

    我有一个 Django 网络应用程序 它是一个存储账单和发票的平台 现在我正在尝试将这些账单导出为 PDF 格式 我正在使用 xhtml2pdf 但它不起作用 我正在使用此代码进行测试 http obroll com generate pd
  • 如何以编程方式禁用Android中的相机功能

    我想实用地禁用我的 Android 应用程序中的相机 在这里 我想制作一个应用程序 一旦我启动应用程序 启动和停止中有两个按钮 当我单击开始按钮时 我的应用程序将转到主屏幕 并且即使单击我的应用程序中的相机图标不会启用 并且也不会单击硬件按
  • 如何判断一个容器是否无限递归并找到其最小的唯一容器?

    我正在读书展平 不规则的 列表列表 https stackoverflow com questions 2158395 flatten an irregular list of lists in python并决定将其作为 Python 练
  • 按类型获取控件的所有子控件的列表

    我试图创建一个方法来创建一个列表 其中包含 DetalsView 的所有字符串类型的子控件的名称 我得到的最接近的是 foreach Control c in dv Controls if c is Label controlsToChec