近日在用ListView中的一些注意點,和公用代碼,整理如下 1.ListView.Items.Clear而不是ListView.Clear 一般如果ListView是動態(tài)填充的,我們在填充之前都會先進行清理。但需要注意一下,我們是清理Items,如果去直接Clear整個ListView,就連原先定義好的列都沒有了 2.給ListView綁定數(shù)據(jù) ListView并不能直接進行綁定,而是要通過代碼。究其原因,因為它在綁定的時候,還需要設(shè)置圖片等信息。而ListView一般都與TreeView配合使用,它的綁定行為是通過TreeView的點擊來引發(fā)的 /// <summary> /// 當點擊了左邊的Treeview的時候觸發(fā)事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { TreeNode node = e.Node; List<DTOStudent> result = new List<DTOStudent>(); if (node.Nodes.Count == 0)//如果不是根節(jié)點 { //按照專業(yè)讀取學員信息 result = dal.GetStudentBySpec(node.Text); } else { //讀取全部學員信息 result = dal.GetAllStudents(); } BindListView(result); } private void BindListView(List<DTOStudent> result) { //將ListView先進行清理 //一定要注意,是Items.Clear,而不是ListView1.Clear listView1.Items.Clear(); //兩個ImageList也清理一下(因為是動態(tài)添加圖片) imageList1.Images.Clear(); imageList2.Images.Clear(); int i = 0; foreach (DTOStudent student in result) { ListViewItem item = new ListViewItem(student.UID); //動態(tài)得到每個學員所對應(yīng)的圖片 Image image = Utility.ImageProcessor.ConvertToImage(student.Photo); //加入到兩個ImageList里面去 //這兩個ImageList與ListView的LargeIcon和SmallIcon對應(yīng) imageList1.Images.Add(image); imageList2.Images.Add(image); item.ImageIndex = i; i++; listView1.Items.Add(item); item.SubItems.Add(student.Age.ToString()); item.SubItems.Add(student.FirstName); item.SubItems.Add(student.LastName); } }
3.切換ListView的顯示視圖 private void 大圖標ToolStripMenuItem_Click(object sender, EventArgs e) { listView1.View = View.LargeIcon; } private void 小圖標ToolStripMenuItem_Click(object sender, EventArgs e) { listView1.View = View.SmallIcon; } private void 清單ToolStripMenuItem_Click(object sender, EventArgs e) { listView1.View = View.List; } private void 詳細詳細ToolStripMenuItem_Click(object sender, EventArgs e) { listView1.View = View.Details; } 4.一些公用代碼(圖片和字節(jié)轉(zhuǎn)換) using System.Drawing; using System.Runtime.Serialization.Formatters.Binary; using System.IO; namespace Utility { public class ImageProcessor { /// <summary> /// 把圖片轉(zhuǎn)換為字節(jié)(主要是考慮存儲到數(shù)據(jù)庫) /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static byte[] ConvertToBytes(string fileName) { Image image = Image.FromFile(fileName); BinaryFormatter bf = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); bf.Serialize(ms, image); byte[] result = new byte[ms.Length]; ms.Position = 0; ms.Read(result, 0, result.Length); ms.Close(); return result; } /// <summary> /// 從字節(jié)再生成一個圖片(主要是從數(shù)據(jù)庫讀?。? /// </summary> /// <param name="buffer"></param> /// <returns></returns> public static Image ConvertToImage(byte[] buffer) { MemoryStream ms = new MemoryStream(buffer); BinaryFormatter bf = new BinaryFormatter(); Image result = (Image)bf.Deserialize(ms); ms.Close(); return result; } } }
大致截圖如下 |
|
來自: 昵稱48397323 > 《asp.net》