今天我发了这样的请求。
我在一个类中定义了五个地址参数,但是五个地址可能为空或有值。
五个地址存储数据库中的一个字段,如下所示(email1; email2; ....)
何时存储数据库,我需要在页面中获取五个文本框以popludate地址添加“:”,这没关系。
然后问题是,当我从数据库获取数据并在页面中的五个文本框中显示值时。
如果地址有价值,则显示包含五个文本框的页面。没有数据,显示为空。
那么,如何将动态电子邮件列表解析为五个文本框。
string [] emailList = sourceEmail.split(‘;’);
foreach(string email in emailList)
{
this.email0 =?
this.email1=?
this.email2=?
.......
}
我知道这不起作用,因为我们不知道emailList有多少价值。
我知道一种方法可行,但似乎不太好。
string [] emailList =sourceEmail.Split(';');
if(emailList.length ==1)
{
this.email0 = emailList[0];
}
if(emailList.length==2)
{
this.email0 = emailList[0];
this.email1 = emailList[1];
}
if(emailList.length==3)
{
this.email0 = emailList[0];
this.email1 = emailList[1];
this.email2 = emailList[2];
}
我认为这不是一个好方法。 有人可以帮我吗?
答案 0 :(得分:2)
在FormLoad或其他地方的List中添加TextBox。
void OnFormLoad(Object sender, EventArgs e)
{
List<TextBox> texboxesWithEmail = new List<TextBox> { textBox1, textBox2, textBox3, textBox4, textBox5 };
string[] emails = new string[] { "test@test.test", "...." };
PutEmailsInTexboxes(emails, texboxesWithEmail);
}
void PutEmailsInTexboxes(string[] emails, List<TextBox> textBoxes)
{
if (emails.Count() != textBoxes.Count) return;
for (var i = 0; i < emails.Count(); i++)
{
textBoxes[i].Text = emails[i];
}
}
答案 1 :(得分:1)
只是一个循环呢?
string [] emailList = sourceEmail.Split(';');
for (int i = 0; i < emailList.Length; i++)
{
switch (i)
{
case 0:
this.email0 = emailList[i];
break;
case 1:
this.email1 = emailList[i];
break;
....//Do it for all variables
}
}
你可以通过反思来做得更好,但这需要自费。
答案 2 :(得分:1)
您可能希望使用ControlCollection来标识文本框。
因此,您可以使用密钥找到您选择的控件(在您的情况下,名为emailx的文本框)。附加循环索引以完成循环中的键名称。你完成了。而且您不必对现有代码进行任何更改。
string[] emailList = sourceEmail.split(';');
for (int i = 0; i < emailList.Length; i++) {
this.Controls("email" + i).Text = emailList[i];
}
答案 3 :(得分:1)
我认为主要的问题是你在课堂上将这五个地址作为单独的字段/属性。这样你就不能灵活地设置,例如只有三个没有像你发布的那样冗长的if
块,或者采用反射,这对于像你这样的简单案例来说是一个荒谬的想法。
我建议将这些电子邮件存储在List
中。通过这种方式,您可以拥有灵活长度的集合,并且可以轻松使用for
或while
循环,而无需使用开关。将您的email0
,email
,email2
等更改为单个List<string> emails
。然后你可以这样做:
for (int i = 0; i < emailList.Length; i++)
{
this.emails[i] = emailList[i];
}
如果你不能或不想改变你的课程,那么AstralisSomnium或Sriram Sakthivel的解决方案就会很好。