所以我有一个将自定义用户控件加载到流面板中的按钮。我的问题是我试图让“保存”按钮通过并从所有用户控件中获取信息并将它们保存到 XML 文件中。我什至不知道从哪里开始。我已经从表单的已加载部分保存到 XML,但从未从动态加载的对象中保存。因此,每个用户控件中都有一组文本框,因此假设其中有 2 个已加载,XML 文件将如下所示:
<Operation>
<OperationInfo>
<OperationName>Name</OperationName>
<OperationDate>mm/dd/yyy</OperationDate>
<FC>Someone</FC>
</OperationInfo>
<Pilots>
<Pilot>
<PilotName>Name2</PilotName>
<Ship>Ship</Ship>
<StartTime>00:00</StartTime>
<EndTime>00:00</EndTime>
<Hours>0</Hours>
<Pay>0</Pay>
</Pilot>
<Pilot>
<PilotName>Name3</PilotName>
<Ship>Ship</Ship>
<StartTime>00:00</StartTime>
<EndTime>00:00</EndTime>
<Hours>0</Hours>
<Pay>0</Pay>
</Pilot>
</Pilots>
</Operation>
如果我有第三个,就会有另一个“飞行员”实例
更新:在得到 Tariqulazam 的回答后,我得到了以下代码:
public interface IData
{
string Pilotname { get; }
string Ship { get; }
DateTime StartTime { get; }
DateTime EndTime { get; }
decimal payperhour { get; }
}
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
Control ctrl = Form1.LoadControl("~/Dynamic.ascx");
order.Controls.Add(ctrl);
}
}
private static Control LoadControl(string p)
{
throw new NotImplementedException();
}
protected void OpSave_Click(object sender, EventArgs e)
{
foreach (var ctrl in order.Controls)
{
if (ctrl is IData)
{
//Grab data from the UserControl
string name = ((ctrl as IData).Pilotname);
string ship = ((ctrl as IData).Ship);
DateTime starttime = ((ctrl as IData).StartTime);
DateTime endtime = ((ctrl as IData).EndTime);
decimal pph = ((ctrl as IData).payperhour);
//Construct the XML file from the data.
using (StreamWriter sw = File.AppendText(string.Format(@"{0}\ops\op-" + OpName.Text.Replace(" ", "_") + ".xml", Directory.GetCurrentDirectory())))
{
DateTime dtStart = starttime;
DateTime dtEnd = endtime;
if (dtEnd < dtStart)
{
dtEnd = dtEnd.AddDays(1);
}
double hours = (dtEnd - dtStart).TotalHours;
double pay = hours * Convert.ToDouble(pph);
XElement root = new XElement("Operation",
new XElement("OperationName", OpName.Text),
new XElement("OperationDate", OpDate.Value.ToShortDateString()),
new XElement("Pilot",
new XElement("PilotName", name),
new XElement("ShipType", ship),
new XElement("StartTime", starttime),
new XElement("EndTime", endtime),
new XElement("HoursMined", hours),
new XElement("Pay", pay)));
sw.Write("{0}{1}", root, Environment.NewLine);
}
}
}
}
但是这不会保存,而且我认为它不能访问组框中的控件,有没有办法解决这个问题?因为所有需要访问的东西都在一个分组框中。(好吧,动态加载的每个都在自己的 groupbox 中,并且 OpName、FC 和 OpDate 都在同一个 groupbox 中)