winform(ListView及数据库连接)
一、ListView:列表展示数据
1、视图 -
在其右上方小箭头点击将视图改为Largelcon;或右键属性在外观View将其改为Details
2、设置列头 -
在其右上方小箭头点击选择编辑列,然后添加列名;或右键属性-行为-Columns
3、添加行数据 -
在其右上方小箭头点击选择编辑项,然后将属性Text改名,即第一列,添加成员即其它列;或右键属性-行为-Items
-----------------------------------------------------------------------------
二、连接数据库:
1、建立实体类Student、Subject和数据访问类StudentData、SubjectData
2.调用StudentData类中的Select方法,将全部数据取出来
List<Student> list = new StudentData().Select();
3.将数据导入到ListView中去
foreach (Student S in list) { ListViewItem li = new ListViewItem(); li.Text = S.Code; li.SubItems.Add(S.Name); li.SubItems.Add(S.Sexstr); li.SubItems.Add(S.Birstr); li.SubItems.Add(S.SubjectName); listView1.Items.Add(li); }
4.窗体加载后自动绑定显示ListView中的数据
办法:数据绑定代码写在窗体的构造函数中
5.给用户展示最终数据(属性扩展)
6.行号
用C#变量循环++来实现
7.数据重复绑定
在绑定之前清空Items集合
listView1.Items.Clear();
8.选中一行数据
外观 - FullRowSelect:选择其中一项是否选中整行
CheckBoxes:复选框
GridLines:网格线
行为 - HideSelection :当控件没有焦点时,是否移除选定项的突出显示
HeaderStyle:列表头的样式
HoverSelection :鼠标悬浮在项上选择项,不好用,需停顿一会,通常与CheckBoxes连用
重点:
1、数据如何绑定上去
2、如何将选中的数据取出来
一个是FullRowSelect属性为True可以选择整行数据(ListView1.SelectedItems)
if (listView1.SelectedItems.Count > 1)//选择了多行 { MessageBox.Show("修改只允许选择一行"); } else if (listView1.SelectedItems.Count == 1) { foreach (ListViewItem li in listView1.SelectedItems) { if (li.Selected) { MessageBox.Show(li.SubItems[0].Text + li.SubItems[1].Text + li.SubItems[2].Text + li.SubItems[3].Text + li.SubItems[4].Text + li.SubItems[5].Text); } } }
else//未选中
{
MessageBox.Show("请先选中您要修改的数据");
}
另一个是CheckBoxes属性为True时,可以按照复选框来选择整行数据(ListView1.CheckedItems)
foreach (ListViewItem li in listView1.CheckedItems) { if (li.Checked) { MessageBox.Show(li.SubItems[0].Text + li.SubItems[1].Text + li.SubItems[2].Text + li.SubItems[3].Text + li.SubItems[4].Text + li.SubItems[5].Text); } }
删除代码部分:
删除限制:
1、不能不选
2、多条数据如果有未删除的,提示一下,删除成功几条,未成功几条,未成功是那几条
private void button2_Click(object sender, EventArgs e) { int DelCount = 0; //要删除的总条数 int count = 0; //已经删除的条数 string NotDelete = ""; if (listView1.CheckedItems.Count <= 0) { MessageBox.Show("请先选中您要删除的数据"); } else { DelCount = listView1.CheckedItems.Count; foreach(ListViewItem li in listView1.CheckedItems) { if(li.Checked) { bool ok = new StudentData().delete(li.SubItems[1].Text); if (ok) { count += 1; } else { NotDelete += li.SubItems[1].Text + ","; } } } NewMethod(); if (count == DelCount) { MessageBox.Show("删除成功"); } else { MessageBox.Show("删除失败!要删除" + DelCount + "条数据,未删除" + (DelCount - count) + "条数据,未删除的用户名为:" + NotDelete + ""); } } }
添加限制:
1.编号不能为空,且编号不能在数据库中查到
2.姓名不能为空;
public partial class Form2 : Form { Form1 F1 = null; public Form2(Form1 f1) { InitializeComponent(); F1 = f1; List<Subject> slist = new SubjectData().select(); Usub.DataSource = slist; Usub.ValueMember = "SubjectCode"; Usub.DisplayMember = "SubjectName"; } bool c = false;//判断编号是否存在 private void textBox1_TextChanged(object sender, EventArgs e) { Student s = new StudentData().select(UCode.Text.Trim());//调用StudentData类的查询方法 if (s == null) { code1.Text = ""; c = false; } else { code1.Text = "此编号已存在!"; c = true; } } bool n = false;//判断姓名是否为空 private void button1_Click(object sender, EventArgs e) { if(UCode.Text=="") { code1.Text = "编号不能为空!"; c = true; } if(UName.Text=="") { name1.Text="姓名不能为空"; n=false; } else { n=true; name1.Text=""; } Student S1 = new Student(); if(c==false&&n) { S1.Code = UCode.Text.Trim(); S1.Name = UName.Text.Trim(); S1.Sex = ra_true.Checked; S1.Birthday = BIR.Value; S1.SubjectCode = Usub.SelectedValue.ToString(); bool bo= new StudentData().Insert(S1); if (bo) { MessageBox.Show("添加成功!"); F1.NewMethod(); this.Close(); } else { MessageBox.Show("添加失败!"); } } } }