ListView控件学习
1. ListView1控件包含五种视图模式(Details、LargeIcon、List、SmallIcon和Tile),最常用的是Details,它以表格形式展示数据,包括列与行。 可以在控件上的“编辑列”中设置列名,也可以使用 listView1.Columns.Add()方法添加列名;之后可以在“编辑项”中设置项,每一行即为Listview1的Item(项),每行中的每格及后续格为Item的subitems(项中的数据)。
2. listView1.SelectedIndices返回当前所选中的项的索引集合(listView1_SelectedIndexChanged事件在每次点击项时,会一共触发两次,第一次先清空之前选中索引的集合,第二次再把当前选中项的索引存入集合中)。
//所以要避免事件重复触发时的报错,应该先判断当前索引集合是否为空
if (listView1.SelectedIndices.Count > 0)
{
//返回选中项的第一个索引
var selectedIndex = listView1.SelectedItems[0];
//SelectedItems[0].Text与SelectedItems[0].SubItems[0].Text显示的内容是一样的,都是该行第一格
//中的内容
}
3. listView1的Tag属性可以把一个类的实例赋值给它(Item与SubItem都有该属性)
//在选中项时,依旧需要先判断
if(listView1.SelectedItems.Count > 0)
{
ListViewItem myItem = listView1.SelectedItesms[索引];
//之后可以通过类型转换或者as,将myItem转为当初给Tag赋值的类
}
DataGridView控件
dgv控件的datasource属性接收的只是一个简单的表,当源数据中某列为某个类,而dgv控件需要显示这个类中的某个信息时,则需要通过LINQ重新创建一个新表,新表为dgv需要显示的全部信息。
public class ClassAAA
{
public int Index { get; set; }
public string Name { get; set; }
public ClassBBB Bbb { get; set; }
}
public class ClassBBB
{
public int Bindex { get; set; }
public string Bname { get; set; }
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dataGridView1.AutoGenerateColumns = false;
//如果不通过LINQ,在ClassBBB中的属性就无法显示出来
dataGridView1.DataSource = LoadData().Select(s => new
{
Index = s.Index,
Name = s.Name,
Bindex = s.Bbb.Bindex,
Bname = s.Bbb.Bname,
}).ToList();
}
private List<ClassAAA> LoadData()
{
var aaaList = new List<ClassAAA>();
for (int i = 0; i < 5; i++)
{
ClassAAA classAAA = new ClassAAA();
classAAA.Index = i;
classAAA.Name = "AAA" + i;
classAAA.Bbb = new ClassBBB() { Bindex = i + 1, Bname = "BBB" + (i + 1) };
aaaList.Add(classAAA);
}
return aaaList;
}
}
从DataGridView控件导出excel
static void ExportExcelFromDGV(DataGridView dgv,string path)
{
var workBook = new XSSFWorkBook();
var sheet = workBook.CreatSheet("命名导出的表")
//第一行为列名
IRow headerRow = sheet.CreatRow(0);
for(i = 0,i < dgv.Colmuns.Count,i++)
{
ICell headerCell = headerRow.CreatCell(i);
headerCell.SetValue(dgv.Columns[i].HeaderText);
}
//行的序号从1开始,将数据复制到工作表中
for(i = 1,i < dgv.Colmuns.Count,i++)
{
IRow row = sheet.CreatRow(i);
for(j = 0,j < dgv.Colmnus.Count,j++)
{
ICell cell = row.CreatCell(j);
cell.SetValue = (dgv.Rows[i].Cells[j].Value.ToString());
}
}
using(FileStream fs = new FileStream(path,FileMode.CreateNew,FileAccess.Write))
{
workBook.Write(fs);
}
}