Rather than
ListBox
, use
ListView[
^] or
DataGridView[
^].
Here is an example to use with
LinqPad[
^]. Feel free to change it to your needs.
Form f = null;
ListView LvXmlData = null;
TextBox tb1 = null;
TextBox tb2 = null;
void Main()
{
f = CreateForm();
f.Show();
}
private Form CreateForm()
{
Form frm = new Form()
{
Text = "Listbox example",
Size = new Size(800,600),
MinimizeBox = false,
MaximizeBox = false,
SizeGripStyle = SizeGripStyle.Hide
};
SplitContainer sc = new SplitContainer()
{
Name = "sc",
Dock = DockStyle.Fill,
Parent = frm
};
LvXmlData = new ListView()
{
Name = "LvXmlData",
Size = new Size(200, 500),
Dock = DockStyle.Top,
View = View.Details,
MultiSelect = false,
FullRowSelect = true,
Parent = sc.Panel1
};
LvXmlData.Columns.Add("Id");
LvXmlData.Columns.Add("FirstName");
LvXmlData.SelectedIndexChanged += new EventHandler(LvXmlData_SelectedIndexChanged);
sc.SplitterDistance = 440;
for(int i=0; i<2; i++)
{
Label lbl = new Label(){Text = i==0 ? "Id" : "FirstName", Location = new Point(4, (24*i)+10), AutoSize = true, Parent = sc.Panel2};
if(i==0)
tb1 = new TextBox(){Name = "TxtId",Location = new Point(90, (24*i)+8), Size = new Size(240, 24), Parent = sc.Panel2};
else
tb2 = new TextBox(){Name = "TxtFirstName",Location = new Point(90, (24*i)+8), AutoSize = false, Multiline=true, Size = new Size(240, 120), Parent = sc.Panel2};
}
Button btnLoad = new Button()
{
Size = new Size(120, 38),
Location = new Point(10, 510),
Text = "Load xml data",
Parent = sc.Panel1
};
btnLoad.Click += new System.EventHandler(BtnLoadData_Click);
return frm;
}
private void BtnLoadData_Click(object sender, EventArgs ea)
{
string xcontent = @"<?xml version='1.0' encoding='utf-8' ?>
<!-- This is list of employees -->
<employees>
<employee employeeid='1'>
<firstname> Nancy includes a BA in psychology from Colorado State University. She also completed. Nancy is a member of
Toastmasters International. </firstname>
</employee>
<employee employeeid='2'>
<firstname>Nancy is a student.</firstname>
</employee>
<employee employeeid='3'>
<firstname>Janet is a teacher</firstname>
</employee>
<employee employeeid='4'>
<firstname>Nancy is a teacher.</firstname>
</employee>
</employees>";
XDocument xdoc = XDocument.Parse(xcontent);
var result = xdoc.Descendants("firstname")
.Select(x=> new {Id = x.Parent.Attribute("employeeid").Value.ToString(), FirstName = x.Value})
.ToList();
LvXmlData.BeginUpdate();
foreach(var ele in result)
{
LvXmlData.Items.Add(ele.Id).SubItems.Add(ele.FirstName);
}
LvXmlData.Columns[0].Width = -1;
LvXmlData.Columns[1].Width = -1;
LvXmlData.EndUpdate();
}
private void LvXmlData_SelectedIndexChanged(object sender, System.EventArgs e)
{
if(LvXmlData.SelectedItems.Count==1)
{
ListViewItem item = LvXmlData.SelectedItems[0];
tb1.Text = item.SubItems[0].Text;
tb2.Text = item.SubItems[1].Text;
}
}