请问列表控件里,怎么删除多行选中的数据(附图)???

yrisxfyh 2009-09-21 01:41:48


这是不连续的多行被选中的数据,请问具体怎么编写删除掉??????
...全文
256 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yrisxfyh 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zaodt 的回复:]
代码没看,不过常见的问题是:


把上边的删除了,下边的就自动提上来了;

一不注意,就要出错!
[/Quote]

大姐,能告诉我应该怎么解决这个问题吗??
写点代码出来好么??
yrisxfyh 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fishion 的回复:]
POSITION pos = m_AddList.GetFirstSelectedItemPosition();
if (pos == NULL)
{
TRACE(_T("No items were selected!\n"));
}
else
{
while (pos)
{
int nItem = m_AddList.GetNextSelectedItem(pos);
m_AddList.DeleteItem(nItem);
}
}
[/Quote]

你这个代码我执行后,发现只能删除选中的一半的行数,比如选中了6个,就只删掉了3个,选中了8个就只删了4个
zaodt 2009-09-21
  • 打赏
  • 举报
回复
是大哥!
fishion 2009-09-21
  • 打赏
  • 举报
回复

POSITION pos = m_AddList.GetFirstSelectedItemPosition();
if (pos == NULL)
{
TRACE(_T("No items were selected!\n"));
}
else
{
while (pos)
{
int nItem = m_AddList.GetNextSelectedItem(pos);
m_AddList.DeleteItem(nItem);
}
}
MoXiaoRab 2009-09-21
  • 打赏
  • 举报
回复
m_pRecordset->Move(n)是向后移动n个单位,你5楼的代码完全错误。
m_pRecordset->Move((long)nItem);这怎么行??!!!怎么说要移动的也是后面的那个nItem-前面的那个nItem呀。
MoXiaoRab 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 aaronwang81 的回复:]
从最后一个开始删就得了,还减1.效率太低了
[/Quote]
貌似没有直接得到最后一个的函数,然后向前遍历的。。。
你那样取出所有选择的索引,然后倒序,效率岂不是更低
yrisxfyh 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 aaronwang81 的回复:]
从最后一个开始删就得了,还减1.效率太低了
[/Quote]

能给出具体的代码么??
龙凤呈祥焱 2009-09-21
  • 打赏
  • 举报
回复
从最后一个开始删就得了,还减1.效率太低了
yrisxfyh 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tr0j4n 的回复:]
你删除第一个的时候,下面的index都要-1后再删
[/Quote]

什么index减1?? 能讲具体一点么?
MoXiaoRab 2009-09-21
  • 打赏
  • 举报
回复
你删除第一个的时候,下面的index都要-1后再删
yrisxfyh 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zaodt 的回复:]
代码没看,不过常见的问题是:


把上边的删除了,下边的就自动提上来了;

一不注意,就要出错!
[/Quote]

我 try了一下 m_pRecordset->Delete(adAffectCurrent);语句

结果运行时说:
BOF 或 EOF 中,有一个是"真",或者当前的记录已被删除,所需的操作要求一个当前的记录

大姐?? 你看这....??
zaodt 2009-09-21
  • 打赏
  • 举报
回复
代码没看,不过常见的问题是:


把上边的删除了,下边的就自动提上来了;

一不注意,就要出错!
yrisxfyh 2009-09-21
  • 打赏
  • 举报
回复

//获得记录集当前位置
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
POSITION pos = pListCtrl->GetFirstSelectedItemPosition();

if (pos != NULL)
{
// 在处于选中状态的行数里,从第一行循环到选中的最后一行
while (pos != NULL) // 此处的条件可省略
{
int nItem = pListCtrl->GetNextSelectedItem(pos);

//删除数据库中的记录集
if (m_pRecordset->BOF && m_pRecordset->adoEOF)
{
return;
}
m_pRecordset->MoveFirst();
m_pRecordset->Move((long)nItem); // 找到当前的行数
m_pRecordset->Delete(adAffectCurrent); // 删除对应的值
m_pRecordset->Update();
}
}
else
{
return;
}


这是我的代码,执行程序的时候,删除一个运行正常,删除多个,就异常中断掉了..
MoXiaoRab 2009-09-21
  • 打赏
  • 举报
回复
从选中的第一行循环到选中的最后一行
yrisxfyh 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tr0j4n 的回复:]
C/C++ codePOSITION pos= m_listUser.GetFirstSelectedItemPosition();while (pos!= NULL)
{int index= m_listUser.GetNextSelectedItem(pos);//handle here }
有索引,不用我教你怎么删吧?
[/Quote]

请问这个while循环是怎么执行的? 自动从第一行一直循环到最后一行 结束循环吗??
rayyear 2009-09-21
  • 打赏
  • 举报
回复
七里香。。。让我联想很多
MoXiaoRab 2009-09-21
  • 打赏
  • 举报
回复
POSITION   pos   =   m_listUser.GetFirstSelectedItemPosition();   
while (pos != NULL)
{
int index = m_listUser.GetNextSelectedItem(pos);
//handle here
}

有索引,不用我教你怎么删吧?

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧