c# winform中listview的item点击事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# winform中listview的item点击事件相关的知识,希望对你有一定的参考价值。

在窗口的左面有一个listview控件,里面的内容是连接到数据库中的。比如显示的是姓名。点击任一个时,在右面的textbox中显示其完整信息~~求大神指点

基本上,要显示数据库的资料应该用DataGridView比ListView来的好。

不过你用的是ListView,所以我还是讲ListView。


~ListView设定建议~


建议你把ListView的检视模式设为details

然後把ListView.FullRowSelect属性设为true

因为你要一次选中所有行,然後把每个行的值显示到对应的Textbox



~代码设定~


假设ListView的名字为lv,然後有以下这三个项目,他们在ListView中从左到右的排序为:

名字、年龄、性别

接著,他们各自对应的Textbox名字为:

txtName, txtAge, txtSex


~开始撰写代码~


你要把代码写在ListView的lClick事件裏头。

代码是这样写的:

private void lv_Click(object sender, EventArgs e)//lv的Click事件。
        
            int selectCount = lv.SelectedItems.Count; //SelectedItems.Count就是:取得值,表示SelectedItems集合的物件数目。 
            if (selectCount > 0)//若selectCount大於0,说明用户有选中某列。
            
                txtName.Text = lv.SelectedItems[0].SubItems[0].Text;
                txtAge.Text = lv.SelectedItems[0].SubItems[1].Text;
                txtSex.Text = lv.SelectedItems[0].SubItems[2].Text;
            
        

 

如果有问题在问我!

如果我答得出来就回答你!

追问

我在查询时把所有信息都查询出来了,但是只显示姓名。按照你的方法把listview控件设置了view属性和ListView.FullRowSelect=true,确不能显示数据了~~

追答

您好,要在ListView添数据然後显示到该控件上可能比较麻烦,每个检视模式的ListView或许都有不同的方法。我就把代码贴给你看吧!

        //引入此命名空间,这样才能够使用一些我们需要的类别、属性等
        using System.Data.SqlClient;
        
        //先宣告这三个全局的变数,用来存放数据库的资料,并显示到lv上
        string name = "", sex = "";
        int age = 0;
        //在宣告这个全局的方法
        private void userInfo() 
        
            lv.Items.Clear();//将ListView中的项目清空
            sqlConnection connection = new SqlConnection("Data Source=.;Initial Catalog=user;User ID=sa;"); //造一个sqlConnection。里头写的就是要连接的对象
            string sql = "SELECT * FROM user";//宣告一个Sql指令
            SqlCommand cmd = new SqlCommand(sql, SqlConnection);//执行指令
            connection.Open();//打开连接
            SqlDataReader reader = cmd.ExecuteReader();//用来读取资料

字数太多,我分次回答。但是你得要继续追问我,我才能继续回答....

参考技术A forcechanged 事件 读force的value 用value去数据库查对应的值 显示给textbox的value赋值 刷新画面追问

我刚刚接触,还不是很清楚~~你的意思是,把“姓名”作为force的value值,当点击时利用其去查询数据库吗?我看了一下,c# listview中没有forcechanged事件呀

追答

我用的devexpress的listview~ 你用原版的可能没有这个事件~不同的事件e能给你传回的值不一样~你找一个能回传焦点的响应事件~把焦点值读出来当做特征值去读相应的数据 然后显示在text里面就好了

ListView在WinForm中多用于表的构建

ListView在WinForm中多用于表的构建,可以直观的显示表的信息,其格式如同SQL的表

这是他的位置,在公共控件中:

image

Listview的几个重要属性:Columms(集合)、Groups(集合)、Items(集合)、View(视图)、以及Items中的SubItems(集合)

其中View共有5种样式,常用选项为Details(详细资料)

imageimage

下图划分了ListView中Details样式下,各行各列的集合名。

image

Columns集合:需要在其中编辑列名,第一行(列名)

image

Items集合,第一列的第二行开始,这一列是单独的一个集合

image

SubItems集合:从第二列第二行开始,每一行为一个集合。

注:SubItems在Items集合编辑器的属性一栏中

image

 

 

了解了ListView的构造再来看看如何使用代码往里添加数据。

1.创建一个WinForm,在表中画出ListView,并修改ListView的属性:

View修改为Details。

在属性--行为--Columns集合中添加成员,并把Text分别修改为学号,姓名,性别,生日,班级

如图:

image

新建一个类:xuesheng

复制代码
public class xuesheng
    {
        //定义变量并且封装。
private string _Sno;

        public string Sno
        {
            get { return _Sno; }
            set { _Sno = value; }
        }
        private string _Sname;

        public string Sname
        {
            get { return _Sname; }
            set { _Sname = value; }
        }
        private string _Ssex;

        public string Ssex
        {
            get { return _Ssex; }
            set { _Ssex = value; }
        }
        private string _Sbirthday;

        public string Sbirthday
        {
            get { return _Sbirthday; }
            set { _Sbirthday = value; }
        }
        private string _Class;

        public string Class
        {
            get { return _Class; }
            set { _Class = value; }
        }

        public DataTable goujianbiao()//在C#中创建一个临时的数据表
        {
            DataTable dt = new DataTable();//初始化数据表,需要引用using System.Data;
            //添加表的 列
              DataColumn sno = new DataColumn("sno");// 表的列 ("列名")
            dt.Columns.Add(sno);
            DataColumn sname =new DataColumn("sname");
            dt.Columns.Add(sname);
            DataColumn ssex=new DataColumn("ssex");
            dt.Columns.Add(ssex);
            DataColumn sbirthday=new DataColumn("sbirthday");
            dt.Columns.Add(sbirthday);
            DataColumn sclass=new DataColumn("sclass");
            dt.Columns.Add(sclass);

            //创建 表的 行
              DataRow row1=dt.NewRow();
            //在行中填入数据
              row1["sno"]="101";
            row1["sname"]="张三";
            row1["ssex"]="男";
            row1["sbirthday"]="1987-05-15";
            row1["sclass"]="2012班";
            dt.Rows.Add(row1);//将行Row1填入到表dt的行的集合中
              return dt;//返回 数据表 对象
        }
复制代码

在From_Load的函数中输入以下代码:

复制代码
private void Form3_Load(object sender, EventArgs e)
        {
           xuesheng xx = new xuesheng();//如果不再同一个命名空间中不要忘记引用命名空间
            DataTable dt = xx.goujianbiao();//调用方法来构建出datatable表数据
            for (int i = 0; i < dt.Rows.Count; i++)//dt.Rows.Count 获取数据表dt中行的个数
            {
                 DataRow dr = dt.Rows[i];//构建的数据表中一行的数据 ,行的集合,这里只有一行数据,
                   //根据列名找到这一行的元素并添加到Items集合中,第一列第二行,这里这个Items集合只有一个元素
                   listView1.Items.Add(dr["sno"].ToString());
                //根据列名将SubItems集合的元素分别添加进去,第二列第二行开始,集合中的元素按行排列
                   listView1.Items[i].SubItems.Add(dr["sname"].ToString());
                listView1.Items[i].SubItems.Add(dr["ssex"].ToString());
                listView1.Items[i].SubItems.Add(dr["sbirthday"].ToString());
                listView1.Items[i].SubItems.Add(dr["sclass"].ToString());
            }
        }
复制代码

最后运行结果:

image

 

转自https://www.cnblogs.com/Tirisfal/p/4186301.html

以上是关于c# winform中listview的item点击事件的主要内容,如果未能解决你的问题,请参考以下文章

C# winform 的listView控件如何将单元格写入值

c# winform 中如何写事件监听 比如监听listview.items.count是不是发生变化

C# winform程序 绑定listView1控件值(对应数据库表中的字段名) 循环绑定 insert into 语句中的到吗问题...

在winform中,怎么做到一个按钮,,点击一下在listview显示一组新数据,然后点一下listview显示原来的数据.

C#实战:WinForm控件ListView快速上手

VS 2008 (C#) 使用Winform方式,控件Listview要等数据全部加载完后才显示,有啥办法边加载边显示?