⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listdoc.cpp

📁 用户管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  for(i =0; i < m_pListCtrl->GetItemCount(); i++)
  {
	//nData = m_pListCtrl->GetItemData(i);
	nData = GetModify(i);
	if(nData == LD_NEW || 
	   nData == LD_EDIT) //新增
	{
	 if (nData == LD_NEW)
	 {
        if(!m_RecordSet.AddNew()) goto err01;
	 }
	 else 
	 {
		//sKey = m_pListCtrl->GetItemTextEx(i, m_strText);
		nSubItem = _GetSubItem(m_strText);
		sKey = m_pListCtrl->GetItemText(i, nSubItem);
        if(!_MoveSelect(sKey, nRet)) goto err01;
	 }
     for (j=0; j < m_data.size(); j++)
	 {
       Cell = m_data.at(j);
	   if (Cell.dwStyle & CDD_UPDATE)
	   {
		sText = m_pListCtrl->GetItemText(i, Cell.iIndexCol);
//日期为空值
		if(Cell.nClass == CDN_DATEEDIT && sText == _T("    -  -  "))
			sText.Empty();
		else if(Cell.nClass == CDN_TIMEEDIT && sText == _T("  :  "))
			sText.Empty();
		else if(Cell.nClass == CDN_DATETIMEEDIT && sText == _T("    -  -     :  "))
			sText.Empty();
//主键值为负数,表示自动ID
		if(Cell.strName == m_strKey && Cell.dwStyle & CDD_AUTOKEY) 
			continue;
	    if (!m_RecordSet.PutCollect(Cell.strName, sText)) goto err01;
	   }//end if
	 }//end for
     if(!m_RecordSet.Update())   goto err01;
	 SetModify(i, LD_NONE);
	}//end if
  }//end for
  

  m_bModify = false;
  m_caKey.RemoveAll();
  if(bTrans) m_pConnection->CommitTrans();
  return TRUE;

err01:
  if(bTrans) m_pConnection->RollbackTrans();
    if (bMsg)
        ::MessageBox(NULL,"注意:保存资料失败!","系统提示", MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
}
/////////////////////////////////////////
//初始化控件与列表介面
//注:Reset只清除控件不清除列表
void CListDoc::ResetAll()
/////////////////////////////////////////
{
  // CDlgDoc::Reset();
   if(m_pListCtrl==NULL)return;
   m_pListCtrl->SetRedraw(false);
   m_pListCtrl->DeleteAllItems();
   m_pListCtrl->SetRedraw(true);
   m_caKey.RemoveAll();
   m_bModify = false;
}
/////////////////////////////////////////////////
//初始化列表控件
//控件名称、位置、宽度、对齐方式在CDialog
//窗口对相应的控件中取出
BOOL CListDoc::InitList()
/////////////////////////////////////////////////
{
  CDlgDataCell Cell;
  int nFmt, i, j, nIndex = 0;
  if(m_pListCtrl==NULL) return false;
//设置默认为格式:网格/选全行
  DWORD dwStype = m_pListCtrl->GetExtendedStyle();
  dwStype |= (LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
  m_pListCtrl->SetExtendedStyle(dwStype);

//排序
  for (i=0; i < m_data.size(); i++)
  {
    for (j=i+1; j < m_data.size(); j++)
	{
	 if(m_data[i].iIndexCol > m_data[j].iIndexCol)
	 {
	   Cell = m_data.at(i);
	   m_data[i] = m_data[j];
	   m_data[j] = Cell;
     }//end if
	}//end for
	m_data[i].iIndexCol = i;  //设置新的列号
  }//end for

//新建指定位置列
  for (i=0; i < m_data.size(); i++)
  {
    Cell = m_data.at(i);
//不加入列表中
	nIndex = Cell.iIndexCol;
//对齐方式
    if (Cell.dwStyle & CDD_CENTER)  
	        nFmt = LVCFMT_CENTER;
    else if (Cell.dwStyle & CDD_RIGHT)
			nFmt = LVCFMT_RIGHT;
	else
			nFmt = LVCFMT_LEFT;
//取出列名
	 if(Cell.strText.GetLength() == 0)
	  {//取默认值
		  Cell.strText = Cell.strName;
		  m_data[i] = Cell;
	  }
//新增
	  if(m_pListCtrl->InsertColumn(nIndex,
		              Cell.strText, 
					  nFmt, 
					  Cell.nWidth, -1) == -1)
			return FALSE;
  }//end for

//额外增加一列,用于保存修改状态
  m_pListCtrl->InsertColumn(nIndex+1, "_STATE", 0,0, -1);
  return true;
}

void CListDoc::Release()
{
  _DeleteAllColumns();
  CDlgDoc::Release();
}

/////////////////////////////////////////////////
//根据ReportCtrl的位置移动数据库指针
//行内必需包含单一主键列
//nItem   指定行号
BOOL CListDoc::_CheckKey(CString &sNewKey)
/////////////////////////////////////////////////
{
  CString sKey;
  for(int i =0; i < m_pListCtrl->GetItemCount(); i++)
  {
	int nSubItem = _GetSubItem(m_strText);
	sKey = m_pListCtrl->GetItemText(i, nSubItem);
	if (sKey == sNewKey) return false;
  }
  return true;
}
/////////////////////////////////////////////////
//根据ReportCtrl的位置移动数据库指针
//行内必需包含单一主键列
//nItem   指定行号
BOOL CListDoc::_MoveSelect(int nItem)
/////////////////////////////////////////////////
{
//返回当前项的主键值 
  CString  sKey, sSql;
  DataTypeEnum nRet;
  if (nItem < 0 ) return false;
  if (!m_pListCtrl) return false;
  int nSubItem = _GetSubItem(m_strText);
  sKey = m_pListCtrl->GetItemText(nItem, nSubItem);
  if(sKey == _T("")) 
  {
	::MessageBox(NULL,"错误:主键不能为空!","系统提示", MB_OK|MB_ICONEXCLAMATION);
    return false;
  }
  if(!m_RecordSet.MoveFirst()) return false;
  nRet = m_RecordSet.GetFieldType(m_strKey);
  if (nRet == adChar || nRet == adBSTR ||
	  nRet == adVarWChar || nRet == adWChar)
    sSql = m_strKey + "= '" + sKey + "'"; //字符对比
   else
    sSql = m_strKey + "=" + sKey;  //非字符对比
  if(!m_RecordSet.Find(sSql))  return false;
  return true;

}
/////////////////////////////////////////////////
//根据ReportCtrl的位置移动数据库指针
//行内必需包含单一主键列
//sKey   指定主键
//nMode  指定主键类型
BOOL CListDoc::_MoveSelect(CString sKey, int nMode)
/////////////////////////////////////////////////
{
//返回当前项的主键值 
  if(!m_RecordSet.MoveFirst()) return false;
  if (nMode == adChar || nMode == adBSTR ||
	  nMode == adVarWChar || nMode == adWChar)
  {
      sKey = m_strKey + "= '" + sKey + "'"; //字符对比
  }
  else
  {
      sKey = m_strKey + "=" + sKey;         //非字符对比
  }
  return m_RecordSet.Find(sKey);
}

BOOL CListDoc::SetModify(int nItem, int nFlog)
{
  char szData[2];
  int nData;
  szData[1] = NULL;
  if(m_pListCtrl==NULL)return false;
  
  nData = GetModify(nItem);
  int nSubItem = _GetSubItem(_T("_STATE"));
  if(nFlog == LD_NEW)
  {//新增
	  szData[0] = LD_NEW;
	  m_pListCtrl->SetItemText(nItem, nSubItem, szData);
  }
  else if(nData != LD_NEW)
	{//不是新增,修改成其它类型
	  szData[0] = nFlog;
	  m_pListCtrl->SetItemText(nItem, nSubItem, szData);
	}
    //设置无修改标志
  if(nFlog != LD_NONE) m_bModify = true;
  return true;
}
int CListDoc::GetModify(int nItem)
{
  char szData[2];
  szData[0] = NULL;
  szData[1] = NULL;
  if(m_pListCtrl==NULL)return -1;
  int nSubItem = _GetSubItem(_T("_STATE"));
  m_pListCtrl->GetItemText(nItem, nSubItem, szData, 2);
  return (int)szData[0];
}



void CListDoc::Db2List(CAdoRecordSet *pRecordSet)
{
//导入
   int nItem, i, nSubItem;
   CDlgDataCell Cell;
   CString strText;
   nItem = m_pListCtrl->InsertItem(0,_T(""));
//导入一行
   for (i=0; i < m_data.size(); i++)
	 {
       Cell = m_data.at(i);
	   if ((Cell.dwStyle & CDD_RETRIEVE) &&
		   pRecordSet->GetCollect(Cell.strName, strText))
		{
           if(Cell.nClass == CDN_DATEEDIT ||
	          Cell.nClass == CDN_LONGDATECTRL  ||
	          Cell.nClass == CDN_SHORTDATECTRL )
		   {//是日期类型,只取出日期部份
	          if(strText.IsEmpty()) 
				strText = _T("    -  -  ");
			  else
                strText = strText.Left(10);
		   }
           else if(Cell.nClass == CDN_TIMEEDIT ||
                   Cell.nClass == CDN_TIMECTRL)
		   {//是时间类型,只取出时间部份
	          if(strText.IsEmpty()) 
				  strText = _T("  :  ");
	          else if(strText.GetLength() >= 15)
			  {
                  strText = strText.Mid(11, 5);
			  }
		   }
          else if(Cell.nClass == CDN_DATETIMEEDIT)
		  {//是时间类型,只取出时间部份
	         if(strText.IsEmpty()) 
		         strText = _T("    -  -     :  ");
		  }
		nSubItem = Cell.iIndexCol;
		m_pListCtrl->SetItemText(nItem, nSubItem, strText);
		//m_pListCtrl->SetItemData(nItem, LD_NONE);
	   }//end if
	 }//end for
 SetModify(nItem, LD_NONE);
}

BOOL CListDoc::_DeleteAllColumns()
{
 if(m_pListCtrl == NULL) return false;


 return true;
}

int CListDoc::_GetSelected()
{
  ASSERT(m_pListCtrl);
  int nItem = -1;
  POSITION pos = m_pListCtrl->GetFirstSelectedItemPosition();
  if(pos)	nItem = m_pListCtrl->GetNextSelectedItem(pos);
  return nItem;

}

int CListDoc::_GetSubItem(LPCSTR pItemName)
{
  ASSERT(m_pListCtrl);

  CHeaderCtrl *pHeader = m_pListCtrl->GetHeaderCtrl();
  if(pHeader == NULL) return -1;

  CString sName;
  char buf[129];
  HDITEM Item;
  for(int i = 0; i < pHeader->GetItemCount( ) ; i++)
  {
	 memset(&Item, 0, sizeof(HDITEM));
	 Item.mask = HDI_TEXT;
	 Item.pszText = buf;
	 Item.cchTextMax = 128;
	 pHeader->GetItem(i, &Item);
	 sName = Item.pszText;
	 sName.TrimLeft(); sName.TrimRight();
	 if (sName == pItemName) return i;
  }
  return -1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -