有没有办法“参数化”?.net中连续命名的控件

本文关键字:连续 net 控件 参数 参数化 有没有 | 更新日期: 2023-09-27 18:06:10

我有一个应用程序页面,其中有52个连续命名的文本框,允许输入和显示一年的每周需求数字。我的问题是,是否有一种方法来"参数化"一个控件(文本框在这种情况下)的名称,以便我可以通过他们,而不是列出所有52?

例如,我现在像这样详细地列出它们:

IEnumerable<DemandPattern> demandPattern = db.DemandPatterns.Where(x => x.DemandPatternID == demandPatternID);
txtBox1.Text = demandPattern.Where(x => x.Week == 1).Select(x => x.Demand).FirstOrDefault().ToString(); 
txtBox2.Text = demandPattern.Where(x => x.Week == 2).Select(x => x.Demand).FirstOrDefault().ToString();
...
txtBox51.Text = demandPattern.Where(x => x.Week == 51).Select(x => x.Demand).FirstOrDefault().ToString();
txtBox52.Text = demandPattern.Where(x => x.Week == 52).Select(x => x.Demand).FirstOrDefault().ToString();

我知道我可以将它包装在for循环中并用I变量替换week #,但是如何处理文本框名称…

for (int i = 1; i <= 52; i++)
    {
        txtBoxi.Text = demandPattern.Where(x => x.Week == i).Select(x => x.Demand).FirstOrDefault().ToString();
    }

我知道一定有更好的方法来做这件事…这是一个asp.net web应用。

有没有办法“参数化”?.net中连续命名的控件

假设是asp.net:

for (int i = 1; i <= 52; i++)
    {
    var myTb= <FormId>.FindControl("txtBox"+i.ToString()) as TextBox;
    if (myTb == null) continue;
    myTb.Text = demandPattern.Where(x => x.Week == i).Select(x => x.Demand).FirstOrDefault().ToString();
    }

注意- findcontrol不是递归的

如果你想要递归(这意味着文本框不是表单控件的直接子),那么-使用这个递归方法:https://stackoverflow.com/a/4955836/859154

我怎么知道我是否应该递归地搜索它?检查这个https://stackoverflow.com/a/15189759/859154