我生成了一个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());
}
}
}

解决方案 »

  1.   

    这个需要自己写代码,以下是思路:
    1. 放一个编辑控件到窗体上,假设名字是editcontrol可以是Textbox或者其他你需要的控件,visable属性设为False
    2. 相应ListView的SelectedIndexChanged消息,如果你设置FullRowSelect = true,在消息函数里面自己检测鼠标位置确定哪一个subitem被选中,然后计算出找个subitem的Rectangle,把editcontrol编辑控件显示在这个rectangel里面。
    3. 在editcontrol的leave事件中,设置editcontrol.Visable = False,并加上更新数据的代码。
      

  2.   

    不会吧
    一次贴这么多代码
    眼睛痛啊
    你就说你是么问题吧只能修改该条数据第一列的数据不懂啊
    ListView里的都是Item啊
    又是第一条数据又是第一列数据,是什么意思啊
      

  3.   

    补充,如果设FullRowSelect = Fasle可以不用自己通过检测鼠标位置确定哪个subitem被选中,SelectedIndexChanged的事件参数里面有属性可以直接取得.
      

  4.   

    如果那个窗口是允许调节大小的怎么办
    你的要求用ListView是有些麻烦的楼主,干吗这样费劲,用DataGrid不是很好吗
      

  5.   

    myListViewItem.Items[i].SubItems[j].Text="asdfsa";