我有一个包含一堆变量的类TrayDetails
。
public class TrayDetails
{
public string ID { get; set;}
//... some more string variables here
}
然后我在主表上两次宣布。
private TrayDetails Right;
private TrayDetails Left;
我希望迭代特定的Right
或Left
变量,并在满足条件时将其所有变量设置为string.empty
。
代码:
Action FillData = () =>
{
if(Right != null)
{
this.label1.Text = Right.ID;
//... somemore labels = Right.somevariables
}
else
{
//I would want to put the string.empty variables here using a loop.
//I cant seem to get PropertyInfo to work
}
//similar as above
if(Left != null)
// you get the idea
}
如何实现所需的输出?
答案 0 :(得分:0)
如果我弄错了,那么当Text
个对象为{{string
时,您希望将所有(表单)控件的Right/Left
属性设置为为空 null
1}}
您可以使用Linq
this.Controls
.OfType<Control>() // Apply filter, if only for specific controls.
.ToList()
.ForEach(x=> x.Text = string.Empty);
答案 1 :(得分:0)
我建议重构一下,以便使用常用方法设置控件。例如,像这样:
Action FillData = () =>
{
SetupLabels(Right);
SetupLabels(Left);
}
使用这种方法,您可以拥有以下内容:
Right
请注意,由于您在两种情况下都设置了相同的标签,因此无法正常工作,因此如果您的Left
属性不为null,则会设置标签,然后如果TrayDetails
属性也不为空,它会再次更改标签,因此您需要稍微修改一下。
这个想法是一样的,你有一个通用的方法设置你的控件并采用SetupLabels
的实例。如果您尝试在页面的特定部分设置控件,可以将它们包装在容器中,然后更新<asp:PlaceHolder id="LeftContainer" runat="server">
<asp:Label ID="label1" runat="server" />
<!--Other controls-->
</asp:PlaceHolder>
<asp:PlaceHolder id="RightContainer" runat="server">
<asp:Label ID="label1" runat="server" />
<!--Other controls-->
</asp:PlaceHolder>
方法以获取容器名称。
假设您正在使用WebForms,您可以使用以下内容:
private SetupLabels(TrayDetails trayDetails, string containerName)
{
PlaceHolder container = (PlaceHolder) Page.FindControl(containerName);
((Label) container.FindControl("label1")).Text = (trayDetails != null) ? trayDetails.Id : string.Empty;
// Set more labels here
}
SetupLabels方法可能如下所示:
{{1}}
它仍然是一个混乱的解决方案,但可以很好地控制从TrayDetails对象中填充标签的确切方式。