я хотел бы, чтобы гнездиться в DataTable в другой DataTable, например:вложенности DataTables
<Mail>
<SMTP>
<Server>smtp.myserver.de</Server>
<Port>25</Port>
<Security>STARTTLS</Security>
<Authmethod>Login</Authmethod>
</SMTP>
<IMAP>
<Server>imap.myserver.de</Server>
<Port>993</Port>
<Security>STARTTLS</Security>
<Authmethod>Login</Authmethod>
</IMAP>
<Username>myusername</Username>
<Password>mypassword</Password>
<Mailaddress>[email protected]</Mailaddress>
</Mail>
Мой код:
DataTable dt = new DataTable();
DataTable dtsmtp = new DataTable();
DataTable dtimap = new DataTable();
dt.TableName = "Mail";
dtsmtp.TableName = "SMTP";
dtimap.TableName = "IMAP";
DataColumn dcsmtp1 = new DataColumn("Server");
DataColumn dcsmtp2 = new DataColumn("Port");
DataColumn dcsmtp3 = new DataColumn("Security");
DataColumn dcsmtp4 = new DataColumn("Authmethod");
DataColumn dcimap1 = new DataColumn("Server");
DataColumn dcimap2 = new DataColumn("Port");
DataColumn dcimap3 = new DataColumn("Security");
DataColumn dcimap4 = new DataColumn("Authmethod");
DataColumn dc1 = new DataColumn("Username");
DataColumn dc2 = new DataColumn("Password");
DataColumn dc3 = new DataColumn("Mailaddress");
dtsmtp.Columns.Add(dcsmtp1);
dtsmtp.Columns.Add(dcsmtp2);
dtsmtp.Columns.Add(dcsmtp3);
dtsmtp.Columns.Add(dcsmtp4);
dtimap.Columns.Add(dcimap1);
dtimap.Columns.Add(dcimap2);
dtimap.Columns.Add(dcimap3);
dtimap.Columns.Add(dcimap4);
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dtsmtp.Rows.Add("smtp.myserver.de", "25", "STARTTLS", "Password");
dtimap.Rows.Add("imap.myserver.de", "993", "STARTTLS", "Password");
dt.Rows.Add(dtsmtp);
dt.Rows.Add(dtimap);
dt.Rows.Add("myusername", "mypassword", "[email protected]");
ds.Tables.Add(dt);
Если я правильно, это будет достаточно, чтобы добавить таблицы «SMTP» и «IMAP» на мою основную таблицу «Почта». К сожалению, это не работает, я получаю только:
<Mail>
<Username>SMTP</Username>
</Mail-Configuration>
<Mail-Configuration>
<Username>IMAP</Username>
</Mail>
<Mail>
<Username>myusername</Username>
<Password>mypassword</Password>
<Mailaddress>[email protected]</Mailaddress>
</Mail>
Может кто-нибудь указать мне в правильном направлении, пожалуйста. Большое спасибо!
Редактировать: Извините! Во-первых, я должен был упомянуть, что я использую WriteXml(), чтобы получить его в формате XML. После того как я вставил отношение я получаю:
<Mail>
<Username>myusername</Username>
<Password>mypassword</Password>
<Mailaddress>[email protected]</Mailaddress>
<smtp_id>Mail_SMTP</smtp_id>
<imap_id>Mail_IMAP</imap_id>
</Mail>
<SMTP>
<Server>smtp.myserver.de</Server>
<Port>25</Port>
<Security>STARTTLS</Security>
<Authmethod>Login</Authmethod>
</SMTP>
<IMAP>
<Server>imap.myserver.de</Server>
<Port>993</Port>
<Security>STARTTLS</Security>
<Authmethod>Login</Authmethod>
</IMAP>
Итак, мы близки, но не достаточно близко ...
Код:
ds.Tables.Add(dt);
ds.Tables.Add(dtimap);
ds.Tables.Add(dtsmtp);
DataRelation relation = new DataRelation("Mail_SMTP", dtsmtpId, dcsmtpdtId, true);
relation.Nested = true;
ds.Relations.Add(relation);
DataRelation relation1 = new DataRelation("Mail_IMAP", dtimapid, dcimapdtId, true);
relation1.Nested = true;
ds.Relations.Add(relation1);
dt.Rows.Add("myusername", "mypassword", "[email protected]", relation, relation1);
, как вы можете видеть в моем «Правке» выше: я не понимаю, как правильно добавить отношение к моей строке. Я попытался: dt.Rows.Add («myusername», «mypassword», «[email protected]», отношение, отношение1); Но WriteXml() производит: ... ... ... Так, SMTP и IMAP не вложен в MAIL, как и ожидалось –
вам не нужно, чтобы добавить объект отношения в качестве столбцов таблицы; вместо этого добавьте объект отношения к набору данных. см. обновленный фрагмент кода, это поможет вам добавить новые строки в datatable.дайте мне знать, если вы все еще столкнулись с проблемой –
Эй, дорогая, это здорово. наконец, мне удалось установить SMTP и IMAP в MAIL. К сожалению, writeXML() выводит «столбцы отношений». Я получаю: ... ... Как можно скрыть Соотношение колонны кораблей "? –