我正在 C# 中的 VisualStudio 中創建一個 Windows 表單應用程式。
我有一個這樣的 XML 檔案:
<?xml version="1.0" encoding="utf-8"?>
<Team>
<TeamMember>
<Name>Jack John</Name>
<MailAddress>[email protected]</MailAddress>
<SearchName>John, Jack</SearchName>
<AltSearchName>Jack John 123</AltSearchName>
</TeamMember>
<TeamMember>
<Name>Johanna Johnson</Name>
<MailAddress>[email protected]</MailAddress>
<SearchName>Johnson, Johanne</SearchName>
<AltSearchName>Johanna Johnson 123</AltSearchName>
</TeamMember>
<TeamMember>
<Name>Ron Ma</Name>
<MailAddress>[email protected]</MailAddress>
<SearchName>Ma, Ron</SearchName>
<AltSearchName></AltSearchName>
</TeamMember>
</Team>
我想要實作的是將所有名稱(沒有 XML 的其他資訊)放入一個 CheckedListBox。目標是創建一個程式,您可以在其中粘貼一長串人員和電子郵件地址,代碼在該字串中搜索 XML 中的所有 TeamMembers。如果長字串包含 TeamMembers,它將“選中”對應人員的 CheckedListBox 中的框。
到目前為止我所擁有的:
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TestMailVerteiler
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DataSet ds = new DataSet();
string fileNameWithAbsolutePath = "C:/Test/Text.xml";
ds.ReadXml(fileNameWithAbsolutePath);
if (ds.Tables.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i )
{
for (int j = 0; j < ds.Tables[0].Columns.Count; j )
{
checkedListBox1.Items.Add(ds.Tables[0].Rows[i][j].ToString());
}
}
}
}
}
}
但是他(如預期的那樣)會將XML的所有資訊放在CheckedListBox中。
我在想什么:
- 從我的 xml 檔案創建一個內部“表/類(?)”
- 使用表格列“名稱”填寫CheckedListBox
- 使用其他表列稍后搜索輸入字串并匹配“名稱”,如果找到匹配,按下按鈕后,相應地檢查 ListBoxes。
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
最簡單的事情是:
ds.ReadXml(fileNameWithAbsolutePath);
if (ds.Tables.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i )
{
checkedListBox1.Items.Add(ds.Tables[0].Rows[i][0].ToString());
}
}
但是,實作一個類是一個好主意。要自動執行此操作,請選擇整個 XML 并復制到剪貼板。在 Visual Studio 中,將游標放在要插入類的位置。它應該在 Form1 之外,但在同一命名空間內或在單獨的類檔案中。然后轉到編輯(選單)并粘貼特殊 > 粘貼為 XML 類。
類似的東西會出來:
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class Team
{
private TeamTeamMember[] teamMemberField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("TeamMember")]
public TeamTeamMember[] TeamMember
{
get
{
return this.teamMemberField;
}
set
{
this.teamMemberField = value;
}
}
}
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class TeamTeamMember
{
private string nameField;
private string mailAddressField;
private string searchNameField;
private string altSearchNameField;
/// <remarks/>
public string Name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
}
/// <remarks/>
public string MailAddress
{
get
{
return this.mailAddressField;
}
set
{
this.mailAddressField = value;
}
}
/// <remarks/>
public string SearchName
{
get
{
return this.searchNameField;
}
set
{
this.searchNameField = value;
}
}
/// <remarks/>
public string AltSearchName
{
get
{
return this.altSearchNameField;
}
set
{
this.altSearchNameField = value;
}
}
}
現在,這是反序列化您的 xml 并僅提取您的已選中串列框中的名稱的代碼:
XmlSerializer xs = new XmlSerializer(typeof(Team));
using (StreamReader rd = new StreamReader(MyXmlFile))
{
Team team = xs.Deserialize(rd) as Team;
int n = team.TeamMember.Length;
for (int i = 0; i < n; i )
{
checkedListBox1.Items.Add(team.TeamMember[i].Name);
}
}
您必須在開頭插入以下參考:
using System.Xml.Serialization;
using System.IO;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/429712.html
