回 帖 发 新 帖 刷新版面

主题:请教 关于ListView 数据表示的问题。

在listView上表示的数据,我想把标题栏(Columns)的文字在中间表示。而数据栏全部靠左表示。而且执行后就是改变标题栏的幅宽,数据栏的左侧表示也不变。不知可以不可以。 请高手帮忙!!
以下是代码(省略)
namespace LVtest
{
    public partial class Form1 : Form
    {
        public enum Clomuns   设了举例,但是不知该怎么用
        {
            Columns1= 0,
            Columns2,
            Columns3,            
        }
        public Form1()
        {
            InitializeComponent();          
        }
        private void button1_Click(object sender, EventArgs e)
        {
            ListViewItem itemx = new ListViewItem();          

            itemx.Text = "aaaa";      
            itemx.SubItems.Add("bbbb");         
            itemx.SubItems.Add("cccc");  
      
            listView1.Items.Add(itemx);            
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            listView1.View = View.Details;             
            
            listView1.Columns.Add("Clomuns1", 100, HorizontalAlignment.Center);
            listView1.Columns.Add("Clomuns2", 100, HorizontalAlignment.Center);
            listView1.Columns.Add("Clomuns3", 100, HorizontalAlignment.Center);            
        }
        private void button2_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear();
        }
请指教!!!


回复列表 (共6个回复)

沙发

不会吧,没人理我。。。。。。。。。

板凳


痛哭的人[em21]。
向了解listview DrawSubItem的高手。 真心求教!!!!
望不吝赐教。拜托了!!!

3 楼

提示下:问了不少高人,说可以通过DrawItem事件重绘,你可以朝这个方向研究.偶也没搞过!

4 楼


多谢您的支持和指导,我也研究了一下。感觉是首先把listview属性的OwnerDraw=true
然后在listView1_DrawSubItem里处理。
可我还是不太会。
这里的StringAlignment类 是怎么用啊??????????
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        // 一览list项目的和子項目
        private string[][] _Columns = { 
            new string[] {"Colmuns1","aaaa"},
            new string[] {"Colmuns2","bbbb"},
            new string[] {"Colmuns3","cccc"},
         };

        public Form1()
        {
            InitializeComponent();
        }

        // 一览list子項目绘处理
        private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
        {
            StringAlignment alignment = StringAlignment.Near; 
            string colName = _Columns[e.ColumnIndex][0];
            switch(colName)
            {
                case "Colmuns1":
                case "Colmuns2":
                case "Colmuns3":
                    alignment = StringAlignment.Center;
                    break;
                default:
                    alignment = StringAlignment.Near;
                    break;                     

           <<PENDING>>  ??????????????
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 标题项目追加
            listView1.View = View.Details;
            listView1.Columns.Add("Colmuns1", 120);             
            listView1.Columns.Add("Columns2", 120);
            listView1.Columns.Add("Columns3", 120);

            // ColumnHeader 中间表示
            foreach (ColumnHeader ch in listView1.Columns)
            {
                ch.TextAlign = HorizontalAlignment.Center;                
            }
        }       

        // 事件处理
        private void button1_Click_1(object sender, EventArgs e)
        {
            // 项目追加
            ListViewItem item = new ListViewItem();

            item.Text = "aaaa";
            // 子项目追加
            item.SubItems.Add("bbbb");
            item.SubItems.Add("cccc");
            listView1.Items.Add(item);
        }

        private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
        {
            // 绘画
            e.DrawDefault = true;
        }
    }
}

5 楼


    ListView,右击时有个“编辑列”,点击打开,出现columnHeader集合编辑器。在其中可以添加、修改、或删除成员。在右边的窗口里面是其属性,其中的“杂项”下面有一个TextAlign属性,把它修改为 Center,就可以了。

6 楼

imysyy
非常感谢你的指导。这个方法我用了,ColumnHeader的编辑是可以的。不过只能编辑Column。而不能编辑list数据.所以我没用编辑器制作,而是把code写进去了。估计只有这样才有可能描绘item和subItem。我要的结果是无论ColumnHeader处于左,中,右。 list数据总是靠左表示。你一试就知道了。有了好结果,一定拜托告诉我啊。

我来回复

您尚未登录,请登录后再回复。点此登录或注册