我在listview 中存放有数据,双击listview,弹出一个txt编辑框,将编辑框显示并把位置及大小控制在listview 选择的某列需要编辑处,当编辑框失去焦点时候,再把编辑里的内容保存在listview选择的该行指定可以修改列处(也就是双击的地方).. 再把数据存放到数据库里面..请求解决方案!!!!

解决方案 »

  1.   

    1、要有自己的数据类,
    2、填充listview时把Listviewitem的实例的tag赋值为你的数据类的实例,并用此实例的内存设置显示值
    3、当双击时,取得鼠标所在的位置,并显示你的编辑界面,
      

  2.   

       private void Form1_Load(object sender, EventArgs e)
            {
                for (int i = 0; i != 100; i++)
                {
                    listView1.Items.Add(new ListViewItem(new string[] { "1", "1", "1", "1", "1" }));
                }
                TextBox _TextBox = new TextBox();
                _TextBox.Visible = false;
                _TextBox.Leave += new EventHandler(_TextBox_Leave);
                _TextBox.Multiline = true;
                _TextBox.BorderStyle = BorderStyle.None;
                listView1.Controls.Add(_TextBox);          
               
            }        void _TextBox_Leave(object sender, EventArgs e)
            {
                TextBox _TextBox = (TextBox)sender;
                if (_TextBox.Tag == null) return;
                ListViewItem.ListViewSubItem _SubItem = (ListViewItem.ListViewSubItem)_TextBox.Tag;
                _SubItem.Text = _TextBox.Text;
                _SubItem.Tag = null;
                _TextBox.Visible = false;
            }        private void listView1_MouseUp(object sender, MouseEventArgs e)
            {
                ListView _ListView = (ListView)sender;
                if (_ListView.Controls.Count == 0) return;
                TextBox _TextBox = (TextBox)_ListView.Controls[0];
                
                if (_TextBox.Tag != null)_TextBox_Leave(_TextBox, null);
                ListViewItem _Item = _ListView.GetItemAt(e.X, e.Y);
                if (_Item == null) return;
                Rectangle _Rect = _ListView.GetItemRect(listView1.Items.IndexOf(_Item));            int _Width = 0;
                int _ColumnIndex = 0;     
                for (int i = 0; i != _ListView.Columns.Count; i++)
                {
                    _Width += _ListView.Columns[i].Width;                if (e.X < _Width)
                    {
                        _ColumnIndex = i;
                        _Width -= _ListView.Columns[i].Width;
                        break;
                    }               
                }
                _TextBox.Text = _Item.SubItems[_ColumnIndex].Text;
                _TextBox.Height = _Rect.Height;
                _TextBox.Width = _ListView.Columns[_ColumnIndex].Width;
                _TextBox.Tag = _Item.SubItems[_ColumnIndex];
                _TextBox.Location = new Point(_Width, _Rect.Y);
                _TextBox.Visible = true;
                _TextBox.Font = _Item.SubItems[_ColumnIndex].Font;
                _TextBox.Focus();        }     
    写了下看样子不难
      

  3.   

    有个疑问 为什么不用dadaGridView呢?
      

  4.   

    因为listview里有一个checked 属性啊!!我可以通过它实现一些功能..
    我对datagridview 也不很会用..
      

  5.   

    晕~~datagridView里有button check text image link combox ....而且编辑能指定到行或则列...而且输入错误有
    errorText 效果很不错的..你应该尝试用下.
      

  6.   

    哦 忘记加左右滚动条了 要用这个了 [DllImport("User32.dll")]
            private static extern int GetScrollPos(IntPtr ConvertIntPtr, int x);最终位置要- 这个获取的位置...
      

  7.   

        int _Width = -GetScrollPos(_ListView.Handle, 0);改这行