Csharp/C Sharp/XML/XML ListView

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Load XML file to DataTable then add DataTable to ListView

<source lang="csharp"> /* <?xml version="1.0" standalone="yes"?> <NewDataSet>

 <Employee>
   <ID>8</ID>
   <Name>Joe</Name>
 </Employee>

</NewDataSet>

  • /

using System; using System.Collections.Generic; using System.ruponentModel; 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.rupare(valX, valY);
     }
     else
     {
       return String.rupare(
         listX.SubItems[Column].Text, listY.SubItems[Column].Text);
     }
   }
 }


      </source>