我生成了一个ListView,设置为Detail模式,FullRowSelect = true,让LabelEdit=true,在画面中,鼠标点击某条数据的话,只能修改该条数据第一列的数据,现在我想修改后面几列的数据的话,应当如何处理,望赐教。using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;namespace WindowsApplication2
{
/// <summary>
///
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.ListView listView1;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ColumnHeader columnHeader3;
/// <summary>
///
/// </summary>
private System.ComponentModel.Container components = null; public Form1()
{
//
//
//
InitializeComponent(); //
// TODO: InitializeComponent
//
} /// <summary>
///
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows
/// <summary>
///
///
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {
"a1",
"a2",
"a3"}, -1);
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem(new string[] {
"b1",
"b2",
"b3"}, -1);
System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem(new string[] {
"c1",
"c2",
"c3"}, -1);
this.listView1 = new System.Windows.Forms.ListView();
this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
this.columnHeader3 = new System.Windows.Forms.ColumnHeader();
this.SuspendLayout();
//
// listView1
//
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2,
this.columnHeader3});
this.listView1.FullRowSelect = true;
this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1,
listViewItem2,
listViewItem3});
this.listView1.LabelEdit = true;
this.listView1.Location = new System.Drawing.Point(40, 48);
this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(216, 160);
this.listView1.TabIndex = 0;
this.listView1.View = System.Windows.Forms.View.Details;
//
// columnHeader1
//
this.columnHeader1.Width = 71;
//
// columnHeader2
//
this.columnHeader2.Width = 79;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(292, 270);
this.Controls.Add(this.listView1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false); }
#endregion /// <summary>
///
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
}
}
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;namespace WindowsApplication2
{
/// <summary>
///
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.ListView listView1;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ColumnHeader columnHeader3;
/// <summary>
///
/// </summary>
private System.ComponentModel.Container components = null; public Form1()
{
//
//
//
InitializeComponent(); //
// TODO: InitializeComponent
//
} /// <summary>
///
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows
/// <summary>
///
///
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {
"a1",
"a2",
"a3"}, -1);
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem(new string[] {
"b1",
"b2",
"b3"}, -1);
System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem(new string[] {
"c1",
"c2",
"c3"}, -1);
this.listView1 = new System.Windows.Forms.ListView();
this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
this.columnHeader3 = new System.Windows.Forms.ColumnHeader();
this.SuspendLayout();
//
// listView1
//
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2,
this.columnHeader3});
this.listView1.FullRowSelect = true;
this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1,
listViewItem2,
listViewItem3});
this.listView1.LabelEdit = true;
this.listView1.Location = new System.Drawing.Point(40, 48);
this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(216, 160);
this.listView1.TabIndex = 0;
this.listView1.View = System.Windows.Forms.View.Details;
//
// columnHeader1
//
this.columnHeader1.Width = 71;
//
// columnHeader2
//
this.columnHeader2.Width = 79;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(292, 270);
this.Controls.Add(this.listView1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false); }
#endregion /// <summary>
///
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
}
}
1. 放一个编辑控件到窗体上,假设名字是editcontrol可以是Textbox或者其他你需要的控件,visable属性设为False
2. 相应ListView的SelectedIndexChanged消息,如果你设置FullRowSelect = true,在消息函数里面自己检测鼠标位置确定哪一个subitem被选中,然后计算出找个subitem的Rectangle,把editcontrol编辑控件显示在这个rectangel里面。
3. 在editcontrol的leave事件中,设置editcontrol.Visable = False,并加上更新数据的代码。
一次贴这么多代码
眼睛痛啊
你就说你是么问题吧只能修改该条数据第一列的数据不懂啊
ListView里的都是Item啊
又是第一条数据又是第一列数据,是什么意思啊
你的要求用ListView是有些麻烦的楼主,干吗这样费劲,用DataGrid不是很好吗