如何通过 点击list控件中的某一列使它传递给 一个修改的对话框

类别:VC语言 点击:0 评论:0 推荐:

 

 

//////////////////////////////////////////////////////////////////////
//功能:弹出修改记录窗口
//日期:2003.12
//////////////////////////////////////////////////////////////////////
void CMainDlg::OnRadioMod()
{
 // TODO: Add your control notification handler code here
 m_database.Close();//本对话框断开与数据库的连接
 CModifyDlg dlg;
 dlg.m_database.Open(_T("addresslist"));
 int i=m_ctrlperson.GetSelectionMark();
 CString strSQL;
 int id=atoi(m_ctrlperson.GetItemText(i,0));
 CPersonSet m_recordset;
 CDBVariant varValue;
 if(i==-1)
 {
  MessageBox("请选择一条要修改的记录!","提示",MB_OK|MB_ICONINFORMATION);
 }
 else
 {
  int temp=0;
  strSQL.Format("select * from person where ID=%d",id);
  m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
  
  m_recordset.GetFieldValue(temp,varValue);
  dlg.m_modid=varValue.m_lVal;

  m_recordset.GetFieldValue(1,varValue);
  dlg.m_modname=varValue.m_pstring->GetBuffer(1);

  m_recordset.GetFieldValue(2,varValue);
  dlg.m_modsex=varValue.m_pstring->GetBuffer(1);

  m_recordset.GetFieldValue(3,varValue);
  dlg.m_modrelation=varValue.m_pstring->GetBuffer(1);
  
  m_recordset.GetFieldValue(4,varValue);
  dlg.m_modtelephone=varValue.m_pstring->GetBuffer(1);

  m_recordset.GetFieldValue(5,varValue);
  dlg.m_modhandphone=varValue.m_pstring->GetBuffer(1);

  m_recordset.GetFieldValue(6,varValue);
  dlg.m_modaddress=varValue.m_pstring->GetBuffer(1);

  m_recordset.GetFieldValue(7,varValue);
  dlg.m_modworkplace=varValue.m_pstring->GetBuffer(1);

  m_recordset.GetFieldValue(8,varValue);
  dlg.m_modemail=varValue.m_pstring->GetBuffer(1);

  m_recordset.GetFieldValue(9,varValue);
  dlg.m_modoicq=varValue.m_pstring->GetBuffer(1);
  //m_database.Close();//此处不能断开与数据库的连接
  dlg.DoModal();
  RefreshData();
 }
}

 

void CMainDlg::RefreshData()
{
 //首先确保数据库打开
 if(!m_database.IsOpen())
 {
  m_database.Open(_T("addresslist"));
 }
 //对列表控件的内容更新,清空原来的内容
 
 m_ctrlperson.DeleteAllItems();
 //创建记录集
 CPersonSet m_personset(&m_database);
 m_personset.Open(AFX_DB_USE_DEFAULT_TYPE,m_query);
 CDBVariant varValue;
 char buf[20];
 //用来记录当前记录的序号
 int i=0;
 //如果表中有记录,打开后将游标定在第一位,使记录集中的第一条记录成为当前记录
 if(m_personset.GetRecordCount()!=0)  m_personset.MoveFirst();

 while(!m_personset.IsEOF())
 {
  int temp=0;
  //对整型数字的处理
  m_personset.GetFieldValue(temp,varValue);
  sprintf(buf,"%d",varValue.m_lVal);m_ctrlperson.InsertItem(i,buf);
  //对字符串显示处理
  //m_personset.GetFieldValue(0,varValue);
  //m_ctrlperson.SetItemText(i,0,varValue.m_pstring->GetBuffer(1));

  m_personset.GetFieldValue(1,varValue);
  m_ctrlperson.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
          ///第一个参数是表示行,第二个参数表示 列,第三个表示 值
  m_personset.GetFieldValue(2,varValue);
  m_ctrlperson.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));
  
  m_personset.GetFieldValue(3,varValue);
  m_ctrlperson.SetItemText(i,3,varValue.m_pstring->GetBuffer(1));

  m_personset.GetFieldValue(4,varValue);
  m_ctrlperson.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));

  m_personset.GetFieldValue(5,varValue);
  m_ctrlperson.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));

  m_personset.GetFieldValue(6,varValue);
  m_ctrlperson.SetItemText(i,6,varValue.m_pstring->GetBuffer(1));

  m_personset.GetFieldValue(7,varValue);
  m_ctrlperson.SetItemText(i,7,varValue.m_pstring->GetBuffer(1));

  m_personset.GetFieldValue(8,varValue);
  m_ctrlperson.SetItemText(i,8,varValue.m_pstring->GetBuffer(1));

  m_personset.GetFieldValue(9,varValue);
  m_ctrlperson.SetItemText(i,9,varValue.m_pstring->GetBuffer(1));
  m_personset.MoveNext();
  i++; 
 }
 //在标题栏中显示共有记录条数
 int counts=m_personset.GetRecordCount();
 CString str;
 str.Format("通讯录 V1.0 试用版     目前共有记录数: %d",counts); 
 this->SetWindowText(str);
}

 

在修改对话框中的代码;;

// ModifyDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Address.h"
#include "ModifyDlg.h"
#include "PersonSet.h"
#include "MainDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CModifyDlg dialog


CModifyDlg::CModifyDlg(CWnd* pParent /*=NULL*/)
 : CDialog(CModifyDlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CModifyDlg)
 m_modname = _T("");
 m_modsex = _T("");///此处表示字符串为空,可以写成m_modsex="";
 m_modtelephone = _T("");
 m_modhandphone = _T("");
 m_modaddress = _T("");
 m_modworkplace = _T("");
 m_modemail = _T("");
 m_modoicq = _T("");
 m_modid = 0;
 m_modrelation = _T("");
 //}}AFX_DATA_INIT
}


void CModifyDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CModifyDlg)
 DDX_Text(pDX, IDC_EDIT8, m_modid);
 DDX_Text(pDX, IDC_EDIT1, m_modname);
 DDX_CBString(pDX, IDC_COMBO1, m_modsex);
 DDX_Text(pDX, IDC_EDIT9, m_modrelation);
 DDX_Text(pDX, IDC_EDIT2, m_modtelephone);
 DDX_Text(pDX, IDC_EDIT3, m_modhandphone);
 DDX_Text(pDX, IDC_EDIT4, m_modaddress);
 DDX_Text(pDX, IDC_EDIT5, m_modworkplace);
 DDX_Text(pDX, IDC_EDIT6, m_modemail);
 DDX_Text(pDX, IDC_EDIT7, m_modoicq);
 //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CModifyDlg, CDialog)
 //{{AFX_MSG_MAP(CModifyDlg)
 ON_BN_CLICKED(IDC_CLEAR_BUTTON, OnClearButton)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CModifyDlg message handlers
void CModifyDlg::OnOK()
{
 //TODO: Add extra validation here
 UpdateData(TRUE);
 CPersonSet m_recordset;// 此处为记录的实体
 CString strSQL;
 CMainDlg dlg;
 if(!m_modname.IsEmpty())
 {
  strSQL.Format("update person set NAME='%s',SEX='%s',RELATION='%s',TELEPHONE='%s',HANDPHONE='%s',ADDRESS='%s',WORKPLACE='%s',EMAIL='%s',OICQ='%s' where ID=%d"
  ,m_modname,m_modsex,m_modrelation,m_modtelephone,m_modhandphone,m_modaddress,m_modworkplace,m_modemail,m_modoicq,m_modid);
  m_database.ExecuteSQL(strSQL);//cibu
  m_database.Close();
  CDialog::OnOK();
 }
 else
 {
  MessageBox("“姓名”项不可以为空!","提示",MB_OK|MB_ICONINFORMATION);
 }
}

void CModifyDlg::OnClearButton()
{
 // TODO: Add your control notification handler code here
 if(MessageBox("是否真的要清空?","提示",MB_YESNO|MB_ICONQUESTION)==IDYES)
 {
  CEdit* m_pmodid=(CEdit*)GetDlgItem(IDC_EDIT8);
  //m_pmodid->SetWindowText("");
  //m_modname.Empty();
  //m_modsex.Empty();
  m_modrelation.Empty();
  m_modtelephone.Empty();
  m_modhandphone.Empty();
  m_modemail.Empty();
  m_modaddress.Empty();
  m_modworkplace.Empty();
  m_modoicq.Empty();
  UpdateData(FALSE);
 }
}

void CModifyDlg::OnCancel()
{
 // TODO: Add extra cleanup here
 //m_database.Close();
 CDialog::OnCancel();
}

BOOL CModifyDlg::OnInitDialog()
{
 CDialog::OnInitDialog();
 
 // TODO: Add extra initialization here
 UpdateData(FALSE);//将选中的 数据显示在对话框中
 return TRUE;  // return TRUE unless you set the focus to a control
               // EXCEPTION: OCX Property Pages should return FALSE
}

本文地址:http://com.8s8s.com/it/it709.htm