none
label 获取 listview控件某个数据(同一窗体)?? RRS feed

答案

全部回复

  • 你好

    或者你可以嘗試以下的Code

    label1.Text = listView1.Items[0].ToString();

    如果ListView上的data是來自一個Object 的Array

    E.G.

    List<ABCClass> lc = new List<ABCClass>();

    ListView1.DataSource = lc

    ABCClass temp = listView1.Items[0];

    label1.Text = temp.SampleValue; [Sample Value 只是一個 在這個OBJECT 上的PROPERTIES... ]

    Please correct me if my concept is wrong


    Chi
    2011年5月6日 7:32
    版主
  • 假设你的ListView是Details的模式,那么:

     private void Form1_Load(object sender, EventArgs e)
            {
                string s = "";

                foreach (System.Windows.Forms.ListViewItem.ListViewSubItem item in listView1.Items[0].SubItems)
                {
                    s += "   "+item.Text;   //获取第二列到N列的数据,拼接成一行

                }

                label1.Text = s;
            }

    你的WinForm的自动生成代码:

    namespace WindowsAppTest
    {
        partial class Form1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;

            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }

            #region Windows Form Designer generated code

            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {
                "Content1",
                "Content2"}, -1);
                this.listView1 = new System.Windows.Forms.ListView();
                this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
                this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
                this.label1 = new System.Windows.Forms.Label();
                this.SuspendLayout();
                //
                // listView1
                //
                this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
                this.columnHeader1,
                this.columnHeader2});
                this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
                listViewItem1});
                this.listView1.Location = new System.Drawing.Point(12, 42);
                this.listView1.Name = "listView1";
                this.listView1.Size = new System.Drawing.Size(259, 160);
                this.listView1.TabIndex = 0;
                this.listView1.UseCompatibleStateImageBehavior = false;
                this.listView1.View = System.Windows.Forms.View.Details;
                //
                // columnHeader1
                //
                this.columnHeader1.Width = 108;
                //
                // columnHeader2
                //
                this.columnHeader2.Width = 108;
                //
                // label1
                //
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(29, 222);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(35, 13);
                this.label1.TabIndex = 1;
                this.label1.Text = "label1";
                //
                // Form1
                //
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(292, 273);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.listView1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.Load += new System.EventHandler(this.Form1_Load);
                this.ResumeLayout(false);
                this.PerformLayout();

            }

            #endregion

            private System.Windows.Forms.ListView listView1;
            private System.Windows.Forms.ColumnHeader columnHeader1;
            private System.Windows.Forms.ColumnHeader columnHeader2;
            private System.Windows.Forms.Label label1;

        }
    }

     

     


    如果你有其它意见或私下交流,请点击此处
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年5月6日 7:58
    版主
  • 你这个方法label1确实可以显示listView里面的数据,但是是读取一整行的数据,而且连在一起,我需要的是读取listView一行数据里面的某一个数据,而且显示在label1这个位置,也不是显示在窗体的任意位置上的。
    2011年5月6日 13:59
  • label1.Text = listView1.Items[0].ToString();

    这句代码可以运行,出现的问题就是,显示的不是我要的数据,本身如果显示的数据也是listView一行的数据,不能显示其中的某个数据 。

    显示的是:ListViewItem:{1}

    下面的一段代码没怎么看懂,就没有去用了。

    希望改正,帮助我一下。

    2011年5月6日 14:06
  • 麻烦你了,现在要使用某一数据,而不是一行数据。
    2011年5月6日 14:49
  • 您好

    嘗試使用 SubItems

    listView1.Items[0i].SubItems[0].Text

    http://social.msdn.microsoft.com/Forums/zh-TW/233/thread/c6f7a8e5-3d9d-4606-b541-095b0bd48c31/


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年5月6日 17:25
  • 你好,你可以这样做:

    listView1.Items[从零开始的索引].SubItems[从零开始的索引].Text

    注意索引不能溢出


    如果你有其它意见或私下交流,请点击此处
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年5月7日 1:07
    版主
  • 嗯,这个方法可行。那如果我想相加每一行这个数据,(假设有10行listView数据)。在label中显示的是10个数据相加的结果,那应该怎么去写?
    2011年5月7日 2:21
  • 嗯,这个方法可行。那如果我想相加每一行这个数据,(假设有10行listView数据)。在label中显示的是10个数据相加的结果,那应该怎么去写?
    2011年5月7日 2:21
  • 假设这个数据是第一列,那么有:

    int sum = 0;

    for(int i=0;i<Listview1.Items.Count;++i)

    {

        sum+=Convert.ToInt32(ListView1.Items[i].SubItems[0].Text);

    }

    Label1.Text = sum.ToString();


    如果你有其它意见或私下交流,请点击此处
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年5月7日 2:37
    版主
  • 这个方法很好,谢谢你了。这个问题告一段落。谢谢回答问题的朋友们。
    2011年5月7日 2:51
  • 可以的话,请及时标记答案,以便让更多人了解解决方法,谢谢配合。
    如果你有其它意见或私下交流,请点击此处
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年5月7日 2:53
    版主
  • 嗯,已经标记好了。再问一个问题吧。假设有一个listView2,也有数据在里面,通过上面的方法可以在label里面显示多行某数据相加的值。那么,我希望实现的是,listView1某一数据可以显示listView2中多行某数据相加的值。(假设 listView1中余额初始值为0,这是就是listView1中的某一数据。   现在listView2中的第一行某一数据余额为100,第二行余额为200,那么这两行某一数据(余额)相加等于300.     我要在listView1中余额数据为300,就是listView2中相加的值。) 

       请问怎么解决?

    2011年5月7日 5:09
  • Hi again:)

    ListView1.Items[0].SubItems[0].Text = Convert.ToInt32(ListView2.Items[0].SubItems[0].Text)+Convert.ToInt32(ListView2.Items[1].SubItems[0].Text)

    代码解释:

    第二个ListView的第一行第一列+第二行第一列单元格内容到ListView1的第一行第一列单元格中。


    如果你有其它意见或私下交流,请点击此处
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年5月7日 5:15
    版主
  • 无法将类型"int"隐身转换为"string"。你这样是增加第一行和第二行的某一数据,可是我如果很多行呢,我也不知道什么多少行,那又应该怎么去写呢?
    2011年5月7日 5:44
  • int n = 0;

    foreach(ListViewItem item in ListView2.Items)

    {

    n+= Convert.ToInt32(item.SubItems[0].Text);

    }

    ListView1.Items[0].SubItems[0].Text = n.ToString();


    如果你有其它意见或私下交流,请点击此处
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年5月7日 5:57
    版主
  • 嗯,这个方法解决了这个问题。 在这个社区真好,以后扎根这里了。希望多多帮助我这个菜鸟。
    2011年5月7日 6:07
  • 可以告诉我你的QQ或者MSN吗?
    2011年5月7日 12:44