だから私はカスタムユーザーコントロールをフローパネルにロードするボタンを持っています。私の問題は、[保存]ボタンを通過させて、すべてのユーザーコントロールから情報を取得し、それらを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>
そして、もし私が3番目だったら、「パイロット」の別のインスタンスがあるでしょう
更新: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);
}
}
}
}
ただし、これは保存されません。グループボックスのコントロールにアクセスできるとは思いませんが、これを修正する方法はありますか?アクセスする必要のあるものはすべてグループボックスにあります。(動的にロードされるものはそれぞれ独自のグループボックスにあり、OpName、FC、およびOpDateはすべて同じグループボックスにあります)