我有一个ASP.NET(C#)中的变量列表,我试图循环而不编写几十个If语句。我希望做的只是用变量引用每个变量并将其附加到变量名称。如下所示:
string _id1 = Id1CheckBox.Checke.ToString();
string _id2 = Id2CheckBox.Checke.ToString();
string _id3 = Id3CheckBox.Checke.ToString();
int x = 1;
while (x < 20)
{
if ("_id&" + x == "True")
{
_id + x = x.ToString();
}
else
{
_id + x = 0;
}
x++;
}
我尝试做的背后的逻辑是我在表单上有几个复选框,Id1CheckBox,Id2CheckBox,Id3CheckBox等。我需要将这些值作为字符串获取,以便我可以将它们作为参数传递给SQL查询。所以基本上如果Id1CheckBox = true然后_id1 = 1.如果Id2CheckBox = true然后_id2 = 2.如果任何是假,那么我想要像If Id3CheckBox = false然后_id3 = 0这样可能或者我只需要写几个如果语句而不是使用循环?
答案 0 :(得分:0)
你可以使用循环并在循环中执行类似的操作
CheckBox checkbox = (CheckBox )this.FindControl("_id" + x.toString());
if(checkbox.isChecked)
//do something here
然后你可以从那里读取值。
答案来自here
答案 1 :(得分:0)
您可以将复选框放入如下数组中:
private bool[] _checked;
public Form1() // Constructor
{
InitializeComponent();
_checked = Controls
.OfType<CheckBox>()
.Where(cb => cb.Name.StartsWith("Id"))
.OrderBy(cb => cb.Name)
.Select(cb => cb.Checked)
.ToArray();
}
然后像这样循环数组:
for (int i = 0; i < _checked.Length; i++) {
if (_checked[i]) {
...
} else {
...
}
}
注意:数组是编号变量的列表(可以这么说)。我们说数组是索引的。索引范围从0到数组的长度 - 1。
如果您有20个复选框,则将前导零添加到最多为9的名称。例如"Id05CheckBox"
。否则,复选框将无法正确排序。
另请注意,表单的Controls
集合仅包含直接在表单上的控件。如果ckeckbox位于面板或标签页等上,则循环遍历此容器控件的Controls
集合:panel1.Controls
或page1.Controls
- 您就可以获得它。
答案 2 :(得分:0)
我最终使用Dictionary并在foreach循环中添加参数,而不是尝试组合变量。下面是代码:
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("ID1", _id1);
dictionary.Add("ID2", _id2);
dictionary.Add("ID3", _id3);
dictionary.Add("ID4", _id4);
int i = 1;
foreach (var pair in dictionary)
{
if (pair.Value == "True")
{
cmd.Parameters.AddWithValue(pair.Key, i.ToString());
}
else
{
cmd.Parameters.AddWithValue(pair.Key, "0");
}
i++;
}