/* <?xml version="1.0" standalone="yes"?> <NewDataSet> <Employee> <ID>8</ID> <Name>Joe</Name> </Employee> </NewDataSet> */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form { private System.Windows.Forms.Button cmdFillList; private System.Windows.Forms.ListView listView; private System.Windows.Forms.CheckBox chkGroups; public Form1() { InitializeComponent(); listView.View = View.Tile; listView.TileSize = new Size(300, 50); FillList(); } public static DataTable GetProducts() { DataSet dsStore = new DataSet(); dsStore.ReadXml("myXmlFile.xml"); return dsStore.Tables["Employee"]; } public static DataTable GetCategories() { DataSet dsStore = new DataSet(); dsStore.ReadXml("myXmlFile.xml"); return dsStore.Tables["Employee"]; } private void cmdFillList_Click(object sender, EventArgs e) { FillList(); } private void FillList() { listView.Items.Clear(); if (listView.Groups.Count == 0) { DataTable dtGroups = GetCategories(); foreach (DataRow dr in dtGroups.Rows) { listView.Groups.Add(dr["ID"].ToString(), dr["Name"].ToString()); } } listView.ShowGroups = chkGroups.Checked; DataTable dtProducts = GetProducts(); listView.BeginUpdate(); foreach (DataRow dr in dtProducts.Rows) { ListViewItem listItem = new ListViewItem(dr["Name"].ToString()); listItem.ImageIndex = 0; listItem.Group = listView.Groups[dr["ID"].ToString()]; listItem.SubItems.Add(dr["ID"].ToString()); listView.Items.Add(listItem); } if (listView.Columns.Count == 0) { listView.Columns.Add("Product", 100, HorizontalAlignment.Left); listView.Columns.Add("ID", 100, HorizontalAlignment.Left); listView.Columns.Add("Description", 100, HorizontalAlignment.Left); } listView.EndUpdate(); } private void NewView(object sender, System.EventArgs e) { listView.View = (View)(((Control)sender).Tag); } private void listView_ColumnClick(object sender, ColumnClickEventArgs e) { ListViewItemComparer sorter = listView.ListViewItemSorter as ListViewItemComparer; if (sorter == null) { sorter = new ListViewItemComparer(e.Column); listView.ListViewItemSorter = sorter; } else { if (sorter.Column == e.Column && !sorter.Descending) { sorter.Descending = true; listView.Sorting = SortOrder.Descending; } else { listView.Sorting = SortOrder.Ascending; sorter.Descending = false; sorter.Column = e.Column; } } listView.Sort(); } private void cmdResizeColumns_Click(object sender, EventArgs e) { listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); } private void listView_SelectedIndexChanged(object sender, EventArgs e) { if (listView.SelectedItems.Count > 0) Console.WriteLine(listView.SelectedItems[0].SubItems[2].Text); } private void chkGroups_CheckedChanged(object sender, EventArgs e) { FillList(); } private void InitializeComponent() { this.cmdFillList = new System.Windows.Forms.Button(); this.listView = new System.Windows.Forms.ListView(); this.chkGroups = new System.Windows.Forms.CheckBox(); this.SuspendLayout(); // // cmdFillList // this.cmdFillList.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.cmdFillList.FlatStyle = System.Windows.Forms.FlatStyle.System; this.cmdFillList.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.cmdFillList.Location = new System.Drawing.Point(269, 195); this.cmdFillList.Name = "cmdFillList"; this.cmdFillList.Size = new System.Drawing.Size(114, 24); this.cmdFillList.TabIndex = 7; this.cmdFillList.Text = "Fill List"; this.cmdFillList.Click += new System.EventHandler(this.cmdFillList_Click); // // listView // this.listView.AllowColumnReorder = true; this.listView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.listView.FullRowSelect = true; this.listView.GridLines = true; this.listView.Location = new System.Drawing.Point(7, 8); this.listView.MultiSelect = false; this.listView.Name = "listView"; this.listView.Size = new System.Drawing.Size(254, 282); this.listView.Sorting = System.Windows.Forms.SortOrder.Ascending; this.listView.TabIndex = 6; this.listView.SelectedIndexChanged += new System.EventHandler(this.listView_SelectedIndexChanged); this.listView.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView_ColumnClick); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(390, 381); this.Controls.Add(this.listView); this.Controls.Add(this.cmdFillList); this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "Form1"; this.Text = "ListView Example"; this.ResumeLayout(false); this.PerformLayout(); } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } } public class ListViewItemComparer : System.Collections.IComparer { private int column; public int Column { get { return column; } set { column = value; } } private bool numeric = false; public bool Numeric { get { return numeric; } set { numeric = value; } } private bool descending = false; public bool Descending { get { return descending; } set { descending = value; } } public ListViewItemComparer(int columnIndex) { Column = columnIndex; } public int Compare(object x, object y) { ListViewItem listX, listY; if (descending) { listY = (ListViewItem)x; listX = (ListViewItem)y; } else { listX = (ListViewItem)x; listY = (ListViewItem)y; } if (Numeric) { decimal valX, valY; Decimal.TryParse(listX.SubItems[Column].Text, out valX); Decimal.TryParse(listY.SubItems[Column].Text, out valY); return Decimal.Compare(valX, valY); } else { return String.Compare( listX.SubItems[Column].Text, listY.SubItems[Column].Text); } } }