大家帮忙看下这个问题,感谢~

时间:2022-12-04 07:46:05
在修改某项记录时,点击”修改“,弹出对话框的时候,该项记录还在,在原来的记录上重新编辑新数据,该如何实现?
其实我已经实现了点击”修改“,弹出对话框,然后将要改的数据输入到编辑框,实现修改功能,但是弹出的对话框上没有原来的数据。要实现弹出对话框时,原来的数据还在,代码该如何写呢?感谢各位了。
我的修改函数如下:
void CMylistctrlDlg::OnModRow()
{
POSITION spos=NULL;
spos = m_list.GetFirstSelectedItemPosition();
int nSelItem = -1;
nSelItem = m_list.GetNextSelectedItem(spos);//找到要修改的行

CADDDLG dlg;
int nret=dlg.DoModal ();
if(nSelItem >= 0 && nSelItem<m_list.GetItemCount())
{
if(nret==IDOK)
{
CString str;
UpdateData(FALSE);

str.Format (_T("%s"),dlg.m_id) ;
m_list.SetItemText(nSelItem,0,str);//改该行第0项

str.Format (_T("%s"),dlg.m_time ) ;
m_list.SetItemText(nSelItem,1,str);//改该行第1项

str.Format (_T("%s"),dlg.m_chan ) ;
m_list.SetItemText(nSelItem,2,str);//改该行第2项

str.Format (_T("%s"),dlg.m_x ) ;
m_list.SetItemText(nSelItem,3,str);//改该行第3项

str.Format (_T("%s"),dlg.m_y ) ;
m_list.SetItemText(nSelItem,4,str);//改该行第4项

}
}

11 个解决方案

#1


CADDDLG dlg;
int nret=dlg.DoModal (); 

在DoModal之前,传入需要被修改的内容

#2


把列表里的值获取后给对话框上空件 然后用UpdateData(false)

修改了控件上的值后,取对话框上空件的值 UpdateData(true)

#3


取出数据,赋值给修改对话框。

#4


引用 1 楼 ouyh12345 的回复:
CADDDLG dlg;
int nret=dlg.DoModal (); 

在DoModal之前,传入需要被修改的内容

怎么传入呢?

#5


修改弹出对话框的构造函数将要修改的参数传递进入

#6


引用 2 楼 lgstudyvc 的回复:
把列表里的值获取后给对话框上空件 然后用UpdateData(false)

修改了控件上的值后,取对话框上空件的值 UpdateData(true)

你说的我明白,但具体怎么实现呢?

#7


你的对话框类CADDDLG有一些成员变量:m_id、m_time这样的,在你声明CADDDLG dlg之后,DoModal弹出对话框之前,给这些m_id等变量赋值。然后DoModal弹出了对话框,修改这些m_id等值,关闭对话框后(即DoModal返回),你的dlg.m_id就是你修改后的值了

#8


引用 7 楼 dream0411 的回复:
你的对话框类CADDDLG有一些成员变量:m_id、m_time这样的,在你声明CADDDLG dlg之后,DoModal弹出对话框之前,给这些m_id等变量赋值。然后DoModal弹出了对话框,修改这些m_id等值,关闭对话框后(即DoModal返回),你的dlg.m_id就是你修改后的值了

如果这样的话,选中任意一行,弹出对话框的值都是一样的吧,我想要的的是选中任意一行,弹出对话框时,显示的是该行的数据。

#9


怎么没人回呢?怎样把选中行的值传给变量m_id,m_time等啊?急求!!!感谢各位了

#10


CADDDLG dlg;
tmp0=m_list.GetItemText(nSelItem,0);//获取选中行的第一列的值
tmp1=m_list.GetItemText(nSelItem,1);//获取选中行的第二列的值
tmp2=m_list.GetItemText(nSelItem,2);//获取选中行的第三列的值
tmp3=m_list.GetItemText(nSelItem,3);//获取选中行的第四列的值
tmp4=m_list.GetItemText(nSelItem,4);//获取选中行的第五列的值
dlg.m_name=tmp0;
dlg.m_addr=tmp1;
dlg.m_type=tmp2;
dlg.m_x=tmp3;
dlg.m_y=tmp4;

#11


感谢各位,问题解决了

#1


CADDDLG dlg;
int nret=dlg.DoModal (); 

在DoModal之前,传入需要被修改的内容

#2


把列表里的值获取后给对话框上空件 然后用UpdateData(false)

修改了控件上的值后,取对话框上空件的值 UpdateData(true)

#3


取出数据,赋值给修改对话框。

#4


引用 1 楼 ouyh12345 的回复:
CADDDLG dlg;
int nret=dlg.DoModal (); 

在DoModal之前,传入需要被修改的内容

怎么传入呢?

#5


修改弹出对话框的构造函数将要修改的参数传递进入

#6


引用 2 楼 lgstudyvc 的回复:
把列表里的值获取后给对话框上空件 然后用UpdateData(false)

修改了控件上的值后,取对话框上空件的值 UpdateData(true)

你说的我明白,但具体怎么实现呢?

#7


你的对话框类CADDDLG有一些成员变量:m_id、m_time这样的,在你声明CADDDLG dlg之后,DoModal弹出对话框之前,给这些m_id等变量赋值。然后DoModal弹出了对话框,修改这些m_id等值,关闭对话框后(即DoModal返回),你的dlg.m_id就是你修改后的值了

#8


引用 7 楼 dream0411 的回复:
你的对话框类CADDDLG有一些成员变量:m_id、m_time这样的,在你声明CADDDLG dlg之后,DoModal弹出对话框之前,给这些m_id等变量赋值。然后DoModal弹出了对话框,修改这些m_id等值,关闭对话框后(即DoModal返回),你的dlg.m_id就是你修改后的值了

如果这样的话,选中任意一行,弹出对话框的值都是一样的吧,我想要的的是选中任意一行,弹出对话框时,显示的是该行的数据。

#9


怎么没人回呢?怎样把选中行的值传给变量m_id,m_time等啊?急求!!!感谢各位了

#10


CADDDLG dlg;
tmp0=m_list.GetItemText(nSelItem,0);//获取选中行的第一列的值
tmp1=m_list.GetItemText(nSelItem,1);//获取选中行的第二列的值
tmp2=m_list.GetItemText(nSelItem,2);//获取选中行的第三列的值
tmp3=m_list.GetItemText(nSelItem,3);//获取选中行的第四列的值
tmp4=m_list.GetItemText(nSelItem,4);//获取选中行的第五列的值
dlg.m_name=tmp0;
dlg.m_addr=tmp1;
dlg.m_type=tmp2;
dlg.m_x=tmp3;
dlg.m_y=tmp4;

#11


感谢各位,问题解决了