请问C#如何在listview中点击获取表头的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问C#如何在listview中点击获取表头的值相关的知识,希望对你有一定的参考价值。

共有三种方法可以实现

1、以编程方式进行排序

具体为使用 SortOrder 和 SortedColumn 属性确定排序的方向,并使用 SortGlyphDirection 属性手动设置排序的标志符号。Sort 方法的 Sort(DataGridViewColumn,ListSortDirection) 重载仅用于在单列中对数据进行排序。

using System;

using System.ComponentModel;

using System.Windows.Forms;

class Form1 : Form



private Button sortButton = new Button();

private DataGridView dataGridView1 = new DataGridView();

// Initializes the form.

// You can replace this code with designer-generated code.

public Form1()



dataGridView1.Dock = DockStyle.Fill;

dataGridView1.AllowUserToAddRows = false;

dataGridView1.SelectionMode =

DataGridViewSelectionMode.ColumnHeaderSelect;

dataGridView1.MultiSelect = false;

sortButton.Dock = DockStyle.Bottom;

sortButton.Text = "Sort";

Controls.Add(dataGridView1);

Controls.Add(sortButton);

Text = "DataGridView programmatic sort demo";



// Establishes the main entry point for the application.

[STAThreadAttribute()]

static void Main()



Application.EnableVisualStyles();

Application.Run(new Form1());



// Populates the DataGridView.

// Replace this with your own code to populate the DataGridView.

public void PopulateDataGridView()



// Add columns to the DataGridView.

dataGridView1.ColumnCount = 2;

dataGridView1.Columns[0].HeaderText = "Last Name";

dataGridView1.Columns[1].HeaderText = "City";

// Populate the DataGridView.

dataGridView1.Rows.Add(new string[] );

dataGridView1.Rows.Add(new string[] );

dataGridView1.Rows.Add(new string[] );

dataGridView1.Rows.Add(new string[] );

dataGridView1.Rows.Add(new string[] );



protected override void OnLoad(EventArgs e)



sortButton.Click += new EventHandler(sortButton_Click);

PopulateDataGridView();

base.OnLoad(e);



private void sortButton_Click(object sender, System.EventArgs e)



// Check which column is selected, otherwise set NewColumn to null.

DataGridViewColumn newColumn =

dataGridView1.Columns.GetColumnCount(

DataGridViewElementStates.Selected) == 1 ?

dataGridView1.SelectedColumns[0] : null;

DataGridViewColumn oldColumn = dataGridView1.SortedColumn;

ListSortDirection direction;

// If oldColumn is null, then the DataGridView is not currently sorted.

if (oldColumn != null)



// Sort the same column again, reversing the SortOrder.

if (oldColumn == newColumn &&

dataGridView1.SortOrder == SortOrder.Ascending)



direction = ListSortDirection.Descending;



else



// Sort a new column and remove the old SortGlyph.

direction = ListSortDirection.Ascending;

oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None;





else



direction = ListSortDirection.Ascending;



// If no column has been selected, display an error dialog box.

if (newColumn == null)



MessageBox.Show("Select a single column and try again.",

"Error: Invalid Selection", MessageBoxButtons.OK,

MessageBoxIcon.Error);



else



dataGridView1.Sort(newColumn, direction);

newColumn.HeaderCell.SortGlyphDirection =

direction == ListSortDirection.Ascending ?

SortOrder.Ascending : SortOrder.Descending;







3、使用 IComparer 接口自定义排序

使用 Sort 方法的 Sort(IComparer) 重载自定义排序,该重载采用 IComparer 接口的实现来执行多列排序。

#region Using directives

using System;

using System.Drawing;

using System.Windows.Forms;

#endregion

class Form1 : Form



private DataGridView DataGridView1 = new DataGridView();

private FlowLayoutPanel FlowLayoutPanel1 = new FlowLayoutPanel();

private Button Button1 = new Button();

private RadioButton RadioButton1 = new RadioButton();

private RadioButton RadioButton2 = new RadioButton();

// Establish the main entry point for the application.

[STAThreadAttribute()]

public static void Main()



Application.Run(new Form1());



public Form1()



// Initialize the form.

// This code can be replaced with designer generated code.

AutoSize = true;

Text = "DataGridView IComparer sort demo";

FlowLayoutPanel1.FlowDirection = FlowDirection.TopDown;

FlowLayoutPanel1.Location = new System.Drawing.Point( 304, 0 );

FlowLayoutPanel1.AutoSize = true;

FlowLayoutPanel1.Controls.Add( RadioButton1 );

FlowLayoutPanel1.Controls.Add( RadioButton2 );

FlowLayoutPanel1.Controls.Add( Button1 );

Button1.Text = "Sort";

RadioButton1.Text = "Ascending";

RadioButton2.Text = "Descending";

RadioButton1.Checked = true;

Controls.Add( FlowLayoutPanel1 );

Controls.Add( DataGridView1 );



protected override void OnLoad( EventArgs e )



PopulateDataGridView();

Button1.Click += new EventHandler(Button1_Click);

base.OnLoad( e );



// Replace this with your own code to populate the DataGridView.

private void PopulateDataGridView()



DataGridView1.Size = new Size(300, 300);

// Add columns to the DataGridView.

DataGridView1.ColumnCount = 2;

// Set the properties of the DataGridView columns.

DataGridView1.Columns[0].Name = "First";

DataGridView1.Columns[1].Name = "Last";

DataGridView1.Columns["First"].HeaderText = "First Name";

DataGridView1.Columns["Last"].HeaderText = "Last Name";

DataGridView1.Columns["First"].SortMode =

DataGridViewColumnSortMode.Programmatic;

DataGridView1.Columns["Last"].SortMode =

DataGridViewColumnSortMode.Programmatic;

// Add rows of data to the DataGridView.

DataGridView1.Rows.Add(new string[] );

DataGridView1.Rows.Add(new string[] );

DataGridView1.Rows.Add(new string[] );

DataGridView1.Rows.Add(new string[] );

DataGridView1.Rows.Add(new string[] );



private void Button1_Click( object sender, EventArgs e )



if ( RadioButton1.Checked == true )



DataGridView1.Sort( new RowComparer( SortOrder.Ascending ) );



else if ( RadioButton2.Checked == true )



DataGridView1.Sort( new RowComparer( SortOrder.Descending ) );





private class RowComparer : System.Collections.IComparer



private static int sortOrderModifier = 1;

public RowComparer(SortOrder sortOrder)



if (sortOrder == SortOrder.Descending)



sortOrderModifier = -1;



else if (sortOrder == SortOrder.Ascending)



sortOrderModifier = 1;





public int Compare(object x, object y)



DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;

DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;

// Try to sort based on the Last Name column.

int CompareResult = System.String.Compare(

DataGridViewRow1.Cells[1].Value.ToString(),

DataGridViewRow2.Cells[1].Value.ToString());

// If the Last Names are equal, sort based on the First Name.

if ( CompareResult == 0 )



CompareResult = System.String.Compare(

DataGridViewRow1.Cells[0].Value.ToString(),

DataGridViewRow2.Cells[0].Value.ToString());



return CompareResult * sortOrderModifier;







参考技术A 如果是一整行的数据,假设现在一行有4个数据吧。
如果要遍历的话用foreach来实现
int i=0;
StreamWriter SW=new StreamWriter(@"D:\test.txt",true);
foreach(ListViewItem LVI in this.ListView1.Items )

SW.Write(LVI.SubItem[0].text+"|");
SW.Write(LVI.SubItem[1].text+"|");
SW.Write(LVI.SubItem[2].text+"|");
SW.WriteLine(LVI.SubItem[3].text);


SW.Close();

上面是简单的实现将LivsView中的数据写入一个test.txt的文本文档中,每一行ListView的数据用 | 隔开,每写完一行后,转入下一行进行写数据,知道遍历完整个ListView的数据,此外当一行的数据很多的时候,也可以用SubItems.Counts来得到它的个数,并用循环分别读取,由于为了演示的方便,就直接列出了4个
参考技术B 2.用法:
# 排除当前虚拟主机需要正常访问的域名(web.eboat.cn )
# RewriteCond Host: (?:web|www)\.eboat\.cn
# 多数情况下是一个,即当前提供二级域名服务的系统(如建站系统)
RewriteCond Host: web\.eboat\.cn
RewriteRule (.*) $1 [L]
# 解决不规范目录(末尾无/)的问题
# 但前提是目录名不含‘.’而文件名必须包含,否则无法区分两者
# 如果保证URL中的目录名称规范,则无需此规则
RewriteRule ^/([^.]+[^/]$) /$1/ [L,R]
# 提取任意的二级域名名称(即第一个词汇)
# 用[a-zA-Z0-9_-]限制名称字符,重写Url到Home/子目录下
# 如 test.eboat.cn => web.eboat.cn/Home/test
RewriteCond Host: ([a-zA-Z0-9_-]+)\.eboat\.cn
RewriteRule ^/(.*) /Home/$1/$2 [I,L]
[ISAPI_Rewrite]
RepeatLimit 1本回答被提问者采纳

C# 获取listview中选中一行的值

首先必须要判断listView1.SelectedItems.Count>0或是listview1.SelectedIndices.Count>0

否则第一次点击会选不中。

其次,itemSelectionChanged(选中项改变) 和 SelectedIndexChanged(选中项索引值改变,有参数可以直接获取当前选中的索引)事件都可以触发。

案例:

例如下面使用的例子:

选中点击那一行的第一列的值,索引值必须是0,而且无论点这一行的第几列,选中的都是这一行第一列的值 ,如果想获取这一行除第一列外的值,则用subitems获取,subitems的[]中为索引,从1开始。

private void listView_ItemSelectionChanged(object sender,EventArgs e)
{  

	if (listView1.SelectedItems.Count == 0) 
		return;  
  	else 
	{ 
		//选中点击那一行的第一列的值,索引值必须是0,而且无论点这一行的第几列,选中的都是这一行第一列的值 ,如果想获取这一行除第一列外的值,则用subitems获取,[]中为索引,从1开始。
		string first = listView1.SelectedItems[0].Text;
		string second = listView1.SelectedItems[0].SubItems[1].Text;
	}
}


以上是关于请问C#如何在listview中点击获取表头的值的主要内容,如果未能解决你的问题,请参考以下文章

c# winform 如何取得用户控件中 的值

请问Java中Map集合如何使用?key值和value值如何用?请说的详细一点

如何从C#中获取ListView中选中某一行某一列的值

C# 获取listview中选中一行的值

C# 获取listview中选中一行的值

C# 获取listview中选中一行的值