1 listview 拖动某项
/// <summary>
/// 当拖动某项时触发;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lvwVarity_ItemDrag(object sender, ItemDragEventArgs e)
{
try
{
lvwVarity.DoDragDrop(e.Item, DragDropEffects.Move);
}
catch (Exception ex)
{
_logDescription = "lvwVarity_ItemDrag exception " + ex.Message;
_logHelper.WriteLog(LogStyle.eError, _logDescription);
}
}
/// <summary>
/// 鼠标拖动某项至某个区域;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lvwVarity_DragEnter(object sender, DragEventArgs e)
{
try
{
e.Effect = DragDropEffects.Move;
}
catch (Exception ex)
{
_logDescription = "lvwVarity_DragEnter exception " + ex.Message;
_logHelper.WriteLog(LogStyle.eError, _logDescription);
}
}
/// <summary>
/// 当拖动鼠标至某项上方时;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lvwVarity_DragOver(object sender, DragEventArgs e)
{
try
{
Point ptScreen = new Point(e.X, e.Y);
Point ptlvw = lvwVarity.PointToClient(ptScreen);
ListViewItem item = lvwVarity.GetItemAt(ptlvw.X, ptlvw.Y);
if (null != item)
{
item.Selected = true;
}
}
catch (Exception ex)
{
_logDescription = "lvwVarity_DragOver exception" + ex.Message;
_logHelper.WriteLog(LogStyle.eError, _logDescription);
}
}
/// <summary>
/// 拖动到了目的地;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lvwVarity_DragDrop(object sender, DragEventArgs e)
{
try
{
ListViewItem draggedItem = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
Point ptScreen = new Point(e.X, e.Y);
Point ptLvw = lvwVarity.PointToClient(ptScreen);
ListViewItem targetItem = lvwVarity.GetItemAt(ptLvw.X, ptLvw.Y);
if (null == targetItem)
{
return;
}
lvwVarity.Items.Insert(targetItem.Index, (ListViewItem)draggedItem.Clone());
if (targetItem.Index - 1 > 0)
{
lvwVarity.Items[targetItem.Index - 1].Selected = true;
}
lvwVarity.Items.Remove(draggedItem);
ReSetIndex();
}
catch (Exception ex)
{
_logDescription = "lvwVarity_DragDrop exception" + ex.Message;
_logHelper.WriteLog(LogStyle.eError, _logDescription);
}
}
/// <summary>
/// 向上移动;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuUp_Click(object sender, EventArgs e)
{
_logDescription = "Enter menuUp_Click ";
_logHelper.WriteLog(LogStyle.eNormal, _logDescription);
try
{
if (null != currentListView && currentListView.Equals(lvwVarity))
{
if (lvwVarity.SelectedItems.Count > 0)
{
if (movingVarityIndex - 1 >= 0 && null != movingVarityItem)
{
lvwVarity.Items.Remove(lvwVarity.SelectedItems[0]);
lvwVarity.Items.Insert(movingVarityIndex - 1, movingVarityItem);
ReSetIndex();
movingVarityIndex -= 1;
}
}
}
}
catch (Exception ex)
{
_logDescription = "menuUp_Click Exception: " + ex.Message;
_logHelper.WriteLog(LogStyle.eError, _logDescription);
}
_logDescription = "Out menuUp_Click ";
_logHelper.WriteLog(LogStyle.eNormal, _logDescription);
}
/// <summary>
/// 向下移动;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuDown_Click(object sender, EventArgs e)
{
_logDescription = "Enter menuDown_Click ";
_logHelper.WriteLog(LogStyle.eNormal, _logDescription);
try
{
if (null != currentListView && currentListView.Equals(lvwVarity))
{
if (lvwVarity.SelectedItems.Count > 0)
{
if (movingVarityIndex + 1 < lvwVarity.Items.Count && null != movingVarityItem)
{
lvwVarity.Items.Remove(lvwVarity.SelectedItems[0]);
lvwVarity.Items.Insert(movingVarityIndex + 1, movingVarityItem);
ReSetIndex();
movingVarityIndex += 1;
}
}
}
else if (null != currentListView && currentListView.Equals(lvwConvertInfo))
{
if (lvwConvertInfo.SelectedItems.Count > 0)
{
if (movingConInfoItemIndex + 1 < lvwConvertInfo.Items.Count && null != movingConvertInfoItem)
{
lvwConvertInfo.Items.Remove(lvwConvertInfo.SelectedItems[0]);
lvwConvertInfo.Items.Insert(movingConInfoItemIndex + 1, movingConvertInfoItem);
ReSetIndex();
movingConInfoItemIndex += 1;
}
}
}
}
catch (Exception ex)
{
_logDescription = "menuDown_Click Exception: " + ex.Message;
_logHelper.WriteLog(LogStyle.eError, _logDescription);
}
_logDescription = "Out menuDown_Click ";
_logHelper.WriteLog(LogStyle.eNormal, _logDescription);
}
if (null != currentListView && currentListView.Equals(lvwVarity)) // 在varity表里查找;
{
// 查找出符合条件的所有项;
IEnumerable<ListViewItem> searchedItems = lvwVarity.Items.Cast<ListViewItem>().ToList<ListViewItem>().Where(x => x.SubItems[0].Text.Trim().Contains(searchText.Trim().ToUpper()) || x.SubItems[0].Text.Trim().Contains(searchText.Trim().ToLower())
|| x.SubItems[1].Text.Trim().Contains(searchText.ToUpper()) || x.SubItems[1].Text.Trim().Contains(searchText.ToLower())
|| x.SubItems[2].Text.Trim().Contains(searchText.ToUpper()) || x.SubItems[2].Text.Trim().Contains(searchText.ToLower())
|| x.SubItems[3].Text.Trim().Contains(searchText.ToUpper()) || x.SubItems[3].Text.Trim().Contains(searchText.ToLower())
|| x.SubItems[4].Text.Trim().Contains(searchText.ToUpper()) || x.SubItems[4].Text.Trim().Contains(searchText.ToLower())
|| x.SubItems[5].Text.Trim().Contains(searchText.ToUpper()) || x.SubItems[5].Text.Trim().Contains(searchText.ToLower())
|| x.SubItems[6].Text.Trim().Contains(searchText.ToUpper()) || x.SubItems[6].Text.Trim().Contains(searchText.ToLower()));
if (searchedItems.Count() > 0)
{
// 找到最后一个时,返回到第一个;
if (varitysearchIndex == searchedItems.Count())
{
varitysearchIndex = 0;
}
ListViewItem item = searchedItems.ElementAt(varitysearchIndex);
if (null != item)
{
lvwVarity.Focus();
item.Selected = true;
item.EnsureVisible();
varitysearchIndex++;
}
}
}
4 加载项时显示慢
原因:每加载一项,就刷新一次列宽,非常耗时
改进:加载完项后,可以一次性刷新列宽