当前位置:C++技术网 > 资讯 > 提问:MFC可编辑的list 如何保存数据到数据库中

提问:MFC可编辑的list 如何保存数据到数据库中

更新时间:2016-05-31 10:13:02浏览次数:1+次

核心代码如下,思想就是创建了一个动态的Edit,然后点击列表的item 就可以实现编辑功能,问题是如何保存到库中(不知道SQL语句中 变量该怎么写)

//点击list   item中 加入的数据

void ClistEditDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
         LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
         NM_LISTVIEW  *pEditCtrl = (NM_LISTVIEW *)pNMHDR;
         printf("行:%d,列:%d\n", pEditCtrl->iItem, pEditCtrl->iSubItem);
        if (pEditCtrl->iItem == -1)//点击到非工作区 行= -1
        {
            if (haveeditcreate == true)//如果之前创建了编辑框就销毁掉
           {
             distroyEdit(&m_list, &m_Edit, e_Item, e_SubItem);//销毁单元格编辑框对象
              haveeditcreate = false;
          }  
         }
       else if (pEditCtrl->iSubItem != 0)//如果不是性别选项  列 = 0
       {
         if (haveeditcreate == true)
           {
        if (!(e_Item == pEditCtrl->iItem && e_SubItem == pEditCtrl->iSubItem))//如果点中的单元格不是之前创建好的
           {
             distroyEdit(&m_list, &m_Edit, e_Item, e_SubItem);
             haveeditcreate = false;
              createEdit(pEditCtrl, &m_Edit, e_Item, e_SubItem, haveeditcreate);//创建编辑框
              }
        }
     else//如果是性别选项,在单元格处生成下拉列表项
    {
       if (haveeditcreate == true)//如果之前创建了编辑框就销毁掉
        {
        distroyEdit(&m_list, &m_Edit, e_Item, e_SubItem);
        haveeditcreate = false;
        }
       else
          {
         e_Item = pEditCtrl->iItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
        e_SubItem = pEditCtrl->iSubItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
          }
     }
   *pResult = 0;
}

//创建编辑框
void ClistEditDlg::createEdit(NM_LISTVIEW  *pEditCtrl, CEdit *createdit, int &Item, int &SubItem, bool &havecreat)// 
 //pEditCtrl为列表对象指针,createdit为编辑框指针对象,
 //Item为创建单元格在列表中的行,SubItem则为列,havecreat为对象创建标准
{
       Item = pEditCtrl->iItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
      SubItem = pEditCtrl->iSubItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
      createdit->Create(ES_AUTOHSCROLL | WS_CHILD | ES_LEFT | ES_WANTRETURN,
     CRect(0, 0, 0, 0), this, IDC_EDIT_CREATEID);//创建编辑框对象 
     havecreat = true;
    createdit->SetFont(this->GetFont(), FALSE);//设置字体,不设置这里的话上面的字会很突兀的感觉
    createdit->SetParent(&m_list);//将list control设置为父窗口,生成的Edit才能正确定位,这个也很重要
    CRect  EditRect;
     m_list.GetSubItemRect(e_Item, e_SubItem, LVIR_LABEL, EditRect);//获取单元格的空间位置信息
    EditRect.SetRect(EditRect.left + 1, EditRect.top + 1, EditRect.left + m_list.GetColumnWidth(e_SubItem) - 1,                 EditRect.bottom - 1);//+1和-1可以让编辑框不至于挡住列表框中的网格线
     CString strItem = m_list.GetItemText(e_Item, e_SubItem);//获得相应单元格字符
      createdit->SetWindowText(strItem);//将单元格字符显示在编辑框上
        createdit->MoveWindow(&EditRect);//将编辑框位置放在相应单元格上
         createdit->ShowWindow(SW_SHOW);//显示编辑框在单元格上面
         createdit->SetFocus();//设置为焦点 
         createdit->SetSel(-1);//设置光标在文本框文字的最后
}
//销毁编辑框
void ClistEditDlg::distroyEdit(CListCtrl *list, CEdit* distroyedit, int &Item, int &SubItem)
{
             CString meditdata;
              distroyedit->GetWindowTextW(meditdata);
              list->SetItemText(Item, SubItem, meditdata);//获得相应单元格字符
             distroyedit->DestroyWindow();//销毁对象,有创建就要有销毁,不然会报错
}

//保存
void ClistEditDlg::OnBnClickedButtonSave()
{
   CString strSQL;

 //  szSQL.Format(_T("UPDATE t_item  SET  ?? "), ???);  (这个地方不知道怎么写了,怎么获取动态Edit)
   if (m_ado.ExecSQL(szSQL) < 0)
    AfxMessageBox(_T("修改失败:") + m_ado.GetLastError());
 
}