Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 863|回复: 0

C# WinForm中ListView 的绑定、读取方法,以及将隐藏列的值读取的解决办法。

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-28 03:07:58 | 显示全部楼层 |阅读模式

    根据自己的应用方式和在网上搜寻的资料,整理一下ListView控件的应用。

    ListView控件可以直观的显示数据,操作很方便简单的特点。

    一,ListView添加表头的两种方法:

    1,直接在控件的任务中的编辑列中添加,Name是绑定的code值,Text是表头的显示值。

    2,在后台代码中添加表头,代码如下:

    ColumnHeader ch = new ColumnHeader();//声明表头,并创建对象
                        ch.Text = "111";  //表头的显示名称
                        ch.Name = "222";  //表头绑定的code值
                        ch.Width = 100;   //表头宽度
                        this.listView_EH.Columns.Add(ch);  //添加表头到ListView中

    如果要添加第二列,可以按照上面的方式添加。

    二,ListView绑定数据的方法

    1,获取dt或ds后foreach遍历每一行记录,然后给ListView的相对于的列附值。这个方法数据源和绑定方法不能分离

    注:注意表头显示的信息和绑定信息的顺序。绑定的顺序既是显示的顺序

    代码如下:

     //绑定ListView,显示数据
            private void SetListView()
            {
                this.listView_EH.Items.Clear();
                DataSet ds = qt.GetQuestionTypeInfo();
                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        string strQuestionTypeID = dr["QuestionTypeID"].ToString();
                        string strQuestionTypeName = dr["QuestionTypeName"].ToString();
                        int intsort = Convert.ToInt32(dr["sort"].ToString());
                        string strAnswerTypeName = dr["AnswerTypeName"].ToString();
                        ListViewItem lvItem = new ListViewItem();
                        lvItem.Text = intsort.ToString();
                        lvItem.Tag = dr;
                        lvItem.SubItems.Add(strQuestionTypeName.ToString());
                        lvItem.SubItems.Add(strAnswerTypeName.ToString());
                        this.listView_EH.Items.Add(lvItem);
                    }
                } 
            }

    然后ListView控件读取当前选择行的代码时可以这样

     //读取ListView的某行的信息
            private void listView_EH_Click(object sender, EventArgs e)
            {
                if (this.listView_EH.Items.Count <= 0) return;
                if (this.listView_EH.SelectedItems.Count <= 0) return;
                int index = this.listView_EH.SelectedItems[0].Index;
                if (index < 0) return;
                DataRow dr = (DataRow)(this.listView_EH.Items[index].Tag);
                this.txt_questiontypeID.Text = dr["QuestionTypeID"].ToString();
                this.num_sort.Text = dr["sort"].ToString();
                this.txt_questiontypename.Text = this.listView_EH.SelectedItems[0].SubItems[1].Text.ToString();
                this.com_answertype.Text = dr["AnswerTypeName"].ToString();
            }

    2,获取dt或者ds后,然后for数据源的每一行的每一列给ListView列附值。这个方法数据源和绑定方法可以分离,但是绑定的时候要注意select的数据源的顺序和显示的顺序是一样的,还有就是显示列和表头对应。注意第二次循环时表头的对应。

    代码如下:

    //绑定ListView,显示数据
            private void SetListView()
            {
                this.listView_EH.Items.Clear();
                DataSet ds = qt.GetQuestionTypeInfo();
                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    ListViewItem lv = null;
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        lv = new ListViewItem(ds.Tables[0].Rows[1].ToString());
                        lv.Tag = ds.Tables[0].Rows[0].ToString();
                        for (int j = 2; j < ds.Tables[0].Columns.Count; j++)
                        {
                            lv.SubItems.Add(ds.Tables[0].Rows[j].ToString());
                        }
                        this.listView_EH.Items.Add(lv);
                    }
                   
                } 
            }
    然后ListView控件读取当前选择行的代码时这样
    //读取ListView的某行的信息
            private void listView_EH_Click(object sender, EventArgs e)
            {
                this.num_sort.Text = this.listView_EH.SelectedItems[0].SubItems[0].Text;
                this.txt_questiontypename.Text = this.listView_EH.SelectedItems[0].SubItems[1].Text;
                this.com_answertype.Text = this.listView_EH.SelectedItems[0].SubItems[2].Text;
            }

    三,解决ListView显示的时候隐藏一列,当读取某行的信息时,可以显示隐藏列的值。

    该问题描述的是当ListView在第二中方法绑定时,显示的时候将某列值隐藏,当读取改行的信息时可以读取隐藏值。

    在第二种方法中。lv = new ListViewItem(ds.Tables[0].Rows[1].ToString());是ListView中显示的第一列数据。

    而lv.Tag=ds.Tables[0].Rows[0].ToString();就是隐藏列。

    当读取改行数据的时候即可通过

    this.txt_questiontypeID.Text = this.listView_EH.SelectedItems[0].Tag.ToString();

    获得该隐藏列的值。

    //Tag可以付任何对象的值,比如字符串,数值型...我经常用该项保存调用数据库时不用显示的编号信息。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 21:04 , Processed in 0.058370 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表