【发布时间】:2017-02-28 09:57:39
【问题描述】:
我有一个从 MySql 服务器提取信息的 listView。
我目前使用timer 每 5 秒左右更新一次此信息。但是每次出现updateListView 时,我的选择都会失去焦点。我将如何防止这种情况?我在 stackoverflow 上环顾四周,但找不到适合我的解决方案。
这是我正在使用的函数updateListView(从 mySql 获取数据):
MySqlCommand cmd2 = new MySqlCommand("SELECT * FROM " + selectTable.Text, dbCon.Connection);
try
{
listView1.Items.Clear(); // suspecting that problem lies here,
// any other way to do this?
using (MySqlDataReader reader2 = cmd2.ExecuteReader())
{
while (reader2.Read())
{
ListViewItem item = new ListViewItem(reader2["ID"].ToString());
item.SubItems.Add(reader2["Name"].ToString());
item.SubItems.Add(reader2["Age"].ToString());
item.SubItems.Add(reader2["DiveNr"].ToString());
item.SubItems.Add(reader2["Difficulty"].ToString());
item.SubItems.Add(reader2["Points"].ToString());
listView1.Items.Add(item);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error updateListView:" + ex.Message);
}
【问题讨论】:
-
嗯,'取消选择'!='选择失去焦点'!它是哪一个? - 您可能必须存储旧选择并在刷新后恢复它。这可能像存储索引一样简单,也可能像实现自定义查找功能一样复杂,具体取决于您的数据..
-
@TaW 我最初解决这个问题的计划是创建一个函数,在更新发生之前存储“我当前选择的索引”,但这似乎不能实现这一点。更像是一个丑陋的解决方法。如果有人知道如何创建更复杂的解决方案,请在此处查看。
-
正如我所写:它真的依赖于您的数据!通常这些指数是不够的,但有时它们会:如果你的项目是一年中的月份和销售额的总和,它们就足够了。但是,如果项目的数量和/或顺序不稳定,您需要一些识别属性。可以是字符串或 guid 或其他什么。你将不得不决定..
-
在您的问题中,您怀疑是否应该清除这些项目。那么这又取决于:这些项目是稳定的,只有少数值会改变,还是可以添加或删除项目?
-
那就不用担心了,只专注于识别物品。看起来
IDs可以吗?所以存储选择的ID(来自LV.SelectedItems并在重新加载后重新选择这些......!
标签: c# mysql winforms listview