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

时间:2014-06-01 08:51:47

标签: c# asp.net .net

我有一个应用程序页面,其中有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变量替换周#,但是如何处理文本框名称......

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

我知道必须有更好的方法来做到这一点...... 这是一个asp.net网络应用程序。

1 个答案:

答案 0 :(得分:2)

假设它是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