使用ListCtrl创建了一个列表,我希望能在列表上直接编辑数据,请问如何才能办到?谢谢。

解决方案 »

  1.   

    http://www.codeproject.com/listctrl/editing_subitems_in_listcontrol.asp
      

  2.   

    XListCtrl - A custom-draw list control with subitem formatting
    http://www.codeproject.com/listctrl/xlistctrl.asp
      

  3.   

    不知道搂主所说是不是在一条项目上单击,可以修改文本
    如果是,在ListView中加入风格LVS_EDITLABELS
    然后处理LVN_BEGINLABELEDIT 和LVN_ENDLABELEDIT
    在TreeView中就是这样用的
      

  4.   

    是这个意思,只是后面那两2个lvn的东西不知道怎么弄上去
      

  5.   

    在ClassWizard中找到这两个消息
    下面是我的代码,可以实现,我刚刚测试过
    注,我用了LVS_REPORT风格
    void CListViewView::OnBeginlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
    // TODO: Add your control notification handler code here GetListCtrl().GetEditControl()->LimitText(20); //设置文本最大长度 *pResult = 0;
    }void CListViewView::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
    // TODO: Add your control notification handler code here //** Get the modified text from the edit control
    CString strText;
    GetListCtrl().GetEditControl()->GetWindowText(strText); //获取当前文本 //** Might do some text validation here //** Check string isn't empty
    if (strText.GetLength() > 0)
    {
    //** Get the selected item handle
    int hSelected = pDispInfo->item.iItem;  
    int hSelected1 = pDispInfo->item.iSubItem;
    //** Set the modified text
    GetListCtrl().SetItemText(hSelected, hSelected1, strText); //设置后来文本
    }

    *pResult = 0;
    }
      

  6.   

    我的代码大致抄袭如下:
    m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_GRIDLINES|LVS_EX_ONECLICKACTIVATE|LVS_EDITLABELS);
    void CLabTestDlg::OnBeginlabeleditList(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
    m_list.GetEditControl()->LimitText(20); 
    *pResult = 0;
    }
    void CLabTestDlg::OnEndlabeleditList(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
    //** Get the modified text from the edit control
    CString strText;
    m_list.GetEditControl()->GetWindowText(strText); //获取当前文本 //** Might do some text validation here //** Check string isn't empty
    if (strText.GetLength() > 0)
    {
    //** Get the selected item handle
    int hSelected = pDispInfo->item.iItem;  
    int hSelected1 = pDispInfo->item.iSubItem;
    //** Set the modified text
    strText="dsaf";
    m_list.SetItemText(hSelected, hSelected1, strText); //设置后来文本
    }


    *pResult = 0;
    }
      

  7.   

    我再把我的OnInitialUpdate()中设置风格的代码给你(没有写数据初始化的代码),我也用过SetExtendedStyle()设置LVS_EDITLABELS,没好用,你试一试我下面的代码,
    //** Get the current style flags
    DWORD dwStyle = GetWindowLong(GetListCtrl().GetSafeHwnd(), GWL_STYLE); //** Remove the current style flags
    dwStyle &=~LVS_TYPEMASK; //** Add the List style
    dwStyle |= LVS_REPORT + LVS_EDITLABELS; //Set it back into the list view
    SetWindowLong(GetListCtrl().GetSafeHwnd(), GWL_STYLE, dwStyle);

    SetRedraw(TRUE);另外:(1)OnBeginlabeleditList就是开始编辑,就是你单击选定条目,变成可编辑状态调用的
    (2)OnEndlabeleditList结束编辑,你跟踪的是后可以看到,当修改后回车,就会进入到该函数中