我有一个应用程序页面,其中有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网络应用程序。
答案 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