在ListView控件中隐藏ID列

时间:2010-08-22 12:38:57

标签: c# winforms listview ado.net

我将ListView控件绑定到DataTable。 DataTable有一个名为ProductID的列。有没有办法隐藏这一栏,因为我以后需要它的价值?

2 个答案:

答案 0 :(得分:13)

我将解决UI角度问题。您可以通过将列宽设置为0来隐藏它。例如,如果ID绑定到第二列:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        listView1.Columns[1].Width = 0;
        listView1.ColumnWidthChanging += listView1_ColumnWidthChanging;
    }

    private void listView1_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e) {
        if (e.ColumnIndex == 1) {
            e.NewWidth = 0;
            e.Cancel = true;
        }
    }
}

这并不是很理想,用户可能会被“分割器”光标所困扰,当光谱分割器右侧有点太远时,它会显示出来。这很难解决。

答案 1 :(得分:2)

如何隐藏/显示列表视图列

C#,.NET framework 3.5。

如果在“虚拟模式”下使用listview,则很容易隐藏和显示listview列。在“虚拟模式”中,您负责使用数据填充listviewitems。这样就可以将正确的数据放入正确的列中。

让我演示一下:

创建表单,并添加listview控件和按钮控件。 将3列添加到listview控件。 将listview控件的“view”属性设置为“Details”。 将listview控件的“VirtualMode”属性设置为“True”。 将listview控件的“VirtualListSize”属性设置为“100”。

在表单中添加一个bool:

private bool mblnShow = true;

为listview控件添加事件“RetrieveVirtualItem”,并添加以下代码:

ListViewItem objListViewItem = new ListViewItem();
objListViewItem.Text = "Item index: " + e.ItemIndex.ToString();
if (mblnShow) objListViewItem.SubItems.Add("second column: " +     DateTime.Now.Millisecond.ToString());
objListViewItem.SubItems.Add("third column: " + DateTime.Now.Millisecond.ToString());
e.Item = objListViewItem;

为按钮控件添加“Click”事件,并添加以下代码:

mblnShow = !mblnShow;
if (mblnShow && !this.listView1.Columns.Contains(this.columnHeader2))   this.listView1.Columns.Insert(1, this.columnHeader2);
else if (!mblnShow && this.listView1.Columns.Contains(this.columnHeader2))
    this.listView1.Columns.Remove(this.columnHeader2);

运行应用程序,然后按按钮显示并隐藏第二列。

请注意,如果将数据放入items集合中,则在虚拟模式下运行listview会抛出错误。关于虚拟模式的知识还有很多,所以我建议在使用之前阅读它。