ListView高手请进,关于C# WinForm中的ListView当前选中行的问题!!!

ren2008 2008-03-20 09:41:23
请教高手们,在我选中ListView某行数据进行编辑后,在数据重载的时候怎么把光标定位到刚刚那行的数据。(即在数据刷新之后光标要自动定位到刚刚被选中编辑的那行。。)
...全文
751 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ren2008 2008-03-20
  • 打赏
  • 举报
回复
谢谢1楼了,2楼和3楼能给个示范代码吗?小弟初学,谢了。。。
北京的雾霾天 2008-03-20
  • 打赏
  • 举报
回复
直接在ListView的Item中修改,不重新加载项目。
virusswb 2008-03-20
  • 打赏
  • 举报
回复
我觉得还是记住下标比较好把
可能速度快一点,可以直接定位,不用比较了
王集鹄 2008-03-20
  • 打赏
  • 举报
回复
public void BindLstRoomTypes()
{
try
{
#region 记忆选中的项
string key = null;
if (lstRoomType.FocusedItem != null)
key = lstRoomType.FocusedItem.Text;
#endregion 记忆选中的项

RoomType myRt = new RoomType();
RoomTypeInfo model = new RoomTypeInfo();

RoomTypeInfo[] models = myRt.GetRoomType();
this.lstRoomType.Items.Clear();
for (int i = 0; i < models.Length; i++)
{
ListViewItem Item = new ListViewItem(models[i].RoomTypeID.ToString());
Item.SubItems.Add(models[i].RoomTypeName);
Item.SubItems.Add(models[i].RoomPrice.ToString());
Item.SubItems.Add(models[i].RoomPrice2.ToString());
Item.SubItems.Add(models[i].RoomDeposit.ToString());
Item.SubItems.Add(models[i].Rate.ToString());
Item.SubItems.Add(models[i].Beds.ToString());

if (models[i].AirCondition)
Item.SubItems.Add("Y");
else
Item.SubItems.Add("N");
if (models[i].WaterHeater)
Item.SubItems.Add("Y");
else
Item.SubItems.Add("N");
if (models[i].BroadBand)
Item.SubItems.Add("Y");
else
Item.SubItems.Add("N");
if (models[i].Colorcast)
Item.SubItems.Add("Y");
else
Item.SubItems.Add("N");
if (models[i].IceBox)
Item.SubItems.Add("Y");
else
Item.SubItems.Add("N");
Item.SubItems.Add(models[i].Remark);

lstRoomType.Items.Add(Item);
}

#region 恢复记忆
if (key != null)
for (int i = 0; i < listView1.Items.Count; i++)
{
if (lstRoomType.Items[i].Text == key)
{
lstRoomType.Items[i].Selected = true;
lstRoomType.Items[i].Focused = true;
lstRoomType.EnsureVisible(i); // 使该项可见
lstRoomType.Focus();
break;
}
}
#endregion 恢复记忆

}
catch (Exception ex)
{
MessageBox.Show("读取类型时出错!!!" + ex.Message);
}
}
王集鹄 2008-03-20
  • 打赏
  • 举报
回复
参考如下代码:
private void button1_Click(object sender, EventArgs e)
{
#region 记忆选中的项
string key = null;
if (listView1.FocusedItem != null)
key = listView1.FocusedItem.Text;
#endregion 记忆选中的项

#region 重新载入
listView1.Items.Clear();
for (int i = 0; i < 100; i++)
listView1.Items.Add(i.ToString());
#endregion 重新载入

#region 恢复记忆
if (key != null)
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].Text == key)
{
listView1.Items[i].Selected = true;
listView1.Items[i].Focused = true;
listView1.EnsureVisible(i); // 使该项可见
listView1.Focus();
break;
}
}
#endregion 恢复记忆
}
ren2008 2008-03-20
  • 打赏
  • 举报
回复

public void BindLstRoomTypes()
{
try
{
RoomType myRt = new RoomType();
RoomTypeInfo model = new RoomTypeInfo();

RoomTypeInfo[] models = myRt.GetRoomType();
this.lstRoomType.Items.Clear();
for (int i = 0; i < models.Length; i++)
{
ListViewItem Item = new ListViewItem(models[i].RoomTypeID.ToString());
Item.SubItems.Add(models[i].RoomTypeName);
Item.SubItems.Add(models[i].RoomPrice.ToString());
Item.SubItems.Add(models[i].RoomPrice2.ToString());
Item.SubItems.Add(models[i].RoomDeposit.ToString());
Item.SubItems.Add(models[i].Rate.ToString());
Item.SubItems.Add(models[i].Beds.ToString());

if (models[i].AirCondition)
Item.SubItems.Add("Y");
else
Item.SubItems.Add("N");
if (models[i].WaterHeater)
Item.SubItems.Add("Y");
else
Item.SubItems.Add("N");
if (models[i].BroadBand)
Item.SubItems.Add("Y");
else
Item.SubItems.Add("N");
if (models[i].Colorcast)
Item.SubItems.Add("Y");
else
Item.SubItems.Add("N");
if (models[i].IceBox)
Item.SubItems.Add("Y");
else
Item.SubItems.Add("N");
Item.SubItems.Add(models[i].Remark);

lstRoomType.Items.Add(Item);
}
lstRoomType.Items[0].Selected = true;

}
catch (Exception ex)
{
MessageBox.Show("读取类型时出错!!!" + ex.Message);
}
}



以上是重载代码!!!
王集鹄 2008-03-20
  • 打赏
  • 举报
回复
ListView
ren2008 2008-03-20
  • 打赏
  • 举报
回复
高手们帮帮我啊,,在线等了。。。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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