C# C将值还原到控件Iterativley

C# C将值还原到控件Iterativley,c#,asp.net,C#,Asp.net,我这里有一个情况,用户有大约100个控件,大多数是多选列表框 但是,其他一些东西在下拉框中插入,它们缩小了筛选的复杂搜索条件。当他们稍后返回时,他们希望通过拉起一条记录将控件重置为他们用于匹配条件的值 所以我制作了一个表,每个控件都有一列,iterativley存储值-逗号 删除列表框-当用户锁定搜索条件以移动到下一步时 然后使用一个开关来表示值是否为x:将控件x设置为值so,那么有没有一个好的方法来迭代这个,因为列的名称就是控件的名称?我现在被难住了 var CParam = Quer

我这里有一个情况,用户有大约100个控件,大多数是多选列表框 但是,其他一些东西在下拉框中插入,它们缩小了筛选的复杂搜索条件。当他们稍后返回时,他们希望通过拉起一条记录将控件重置为他们用于匹配条件的值

所以我制作了一个表,每个控件都有一列,iterativley存储值-逗号 删除列表框-当用户锁定搜索条件以移动到下一步时

然后使用一个开关来表示值是否为x:将控件x设置为值so,那么有没有一个好的方法来迭代这个,因为列的名称就是控件的名称?我现在被难住了

    var CParam = QueryFnc.RstrCntrls(Jnum, Qnum);
    foreach(var a in CParam)
    {
        //Map Values to Matching Named Control


    }

您可能希望使用反射,并且每个控件都应该有一个从单个接口继承的工厂方法,以允许传入存储的值

通过反射,您可以找到一个控件,然后通过它的名称将其实例化为字符串

编辑:
在这里大声思考。。。您还可以使用责任链模式,在类列表中传递列的名称,每个对象都有责任捕获其负责的名称并返回实例。

只要控件树保持不变,就可以使用控件索引映射值。然而,更好的选择是使用控件id,如果它的.NET4使用可预测的id,或者手动分配id,以便更好地将控件映射到值

我更喜欢跨行存储值的表,而不是跨列存储一行中的值。比如说,

UserId  ColumnName  ControlID  Value
------  ----------  ---------  --------
1       ABC         ddlAbc     52
1       XYZ         ddlXyz     102, 32
...
2       XYZ         ddlXyz     23   

这将使事情简单得多——为给定的用户id获取行,然后迭代行。对于每一行,都可以使用FindControl方法查找控件。如果控件层次结构中有命名容器,则可能需要滚动递归实现,然后编写简单的switch语句根据控件类型为控件赋值

您应该共享一些代码,向我们展示控件集合的外观。您可能想查看一下标签顺序,但在您的情况下可能还不够。@J.N.这就是我目前的情况。。。我更多的是在思考阶段哈哈。。。我可以很容易地做一个300线的开关,但我想我会想一个更好的方法来解决它,比如?那篇文章看起来会很有帮助。