Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Question
Monday, December 14, 2009 4:37 PM
I have a ListView in detail view mode and i want the user to be able to move the items up and down.
There are 5 columns per row. How can I achieve this?
All replies (6)
Monday, December 14, 2009 4:50 PM ✅Answered | 1 vote
Hi
You can try this
http://www.knowdotnet.com/articles/listviewmoveitem.html
Its is vb.net. But the logic is the same.Please mark the response as answers if it solves your question or vote as helpful if you find it helpful. http://thoughtorientedarchitecture.blogspot.com/
Monday, December 14, 2009 6:49 PM ✅Answered | 5 votes
I have used this code in the past to move items up or down in the listview. Let me know if this helps any.
private void btnUp_Click(object sender, EventArgs e)
{
try
{
if (lstResourcesSelected.SelectedItems.Count > 0)
{
ListViewItem selected = lstResourcesSelected.SelectedItems[0];
int indx = selected.Index;
int totl = lstResourcesSelected.Items.Count;
if (indx == 0)
{
lstResourcesSelected.Items.Remove(selected);
lstResourcesSelected.Items.Insert(totl - 1, selected);
}
else
{
lstResourcesSelected.Items.Remove(selected);
lstResourcesSelected.Items.Insert(indx - 1, selected);
}
}
else
{
MessageBox.Show("You can only move one item at a time. Please select only one item and try again.",
"Item Select", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
catch (Exception ex)
{
}
}
private void btnDown_Click(object sender, EventArgs e)
{
try
{
if (lstResourcesSelected.SelectedItems.Count > 0)
{
ListViewItem selected = lstResourcesSelected.SelectedItems[0];
int indx = selected.Index;
int totl = lstResourcesSelected.Items.Count;
if (indx == totl - 1)
{
lstResourcesSelected.Items.Remove(selected);
lstResourcesSelected.Items.Insert(0, selected);
}
else
{
lstResourcesSelected.Items.Remove(selected);
lstResourcesSelected.Items.Insert(indx + 1, selected);
}
}
else
{
MessageBox.Show("You can only move one item at a time. Please select only one item and try again.",
"Item Select", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
catch (Exception ex)
{
}
}Dewayne Dodd - Landshark Software "Please make sure to 'Mark As Answer' if this answer solves your question"
Friday, September 2, 2011 8:41 PM
//Move items Down - just change insert index to move items up
if (this.listView.SelectedItems != null && this.listView.SelectedItems.Count > 0)
{
ListViewItem[] itemsTobemoved = this.listView.SelectedItems.Cast<ListViewItem>().ToArray<ListViewItem>();
if (itemsTobemoved != null && itemsTobemoved.Length > 0)
{
foreach (ListViewItem itm in itemsTobemoved)
{
this.listView.Items.Remove(itm);
}
foreach (ListViewItem itm in itemsTobemoved)
{
this.listView.Items.Insert(this.listView.Items.Count , itm);
}
Array.Clear(itemsTobemoved, 0, itemsTobemoved.Length);
}
}
Monday, May 5, 2014 5:54 AM
updated single selection item code with reselect..
private void upButton_Click(object sender, EventArgs e)
{
// shouldn't be possible for the button to still be enabled, but we'll check anyhow
if (secondariesList.SelectedIndex > 0)
{
int selectedIndex = secondariesList.SelectedIndex;
object selectedItem = secondariesList.Items[selectedIndex];
secondariesList.Items.RemoveAt(selectedIndex);
secondariesList.Items.Insert(selectedIndex - 1, selectedItem);
secondariesList.SelectedIndex = selectedIndex - 1;
}
}
private void downButton_Click(object sender, EventArgs e)
{
// shouldn't be possible for the button to still be enabled, but we'll check anyhow
if (secondariesList.SelectedIndex < secondariesList.Items.Count - 1)
{
int selectedIndex = secondariesList.SelectedIndex;
object selectedItem = secondariesList.Items[selectedIndex];
secondariesList.Items.RemoveAt(selectedIndex);
secondariesList.Items.Insert(selectedIndex + 1, selectedItem);
secondariesList.SelectedIndex = selectedIndex + 1;
}
}
Saturday, July 29, 2017 11:15 PM | 1 vote
Edit: Sorry, this is vb.net code...
I made two Subs that should do the job...
Sub MoveListViewItemUp(ByVal _ListView As ListView)
If Not _ListView.SelectedItems(0).Index = 0 Then
Dim toMove As ListViewItem
Dim oldIndex As Integer
oldIndex = _ListView.SelectedItems(0).Index
toMove = _ListView.SelectedItems(0)
_ListView.Items.Remove(toMove)
_ListView.Items.Insert(oldIndex - 1, toMove)
End If
End Sub
Sub MoveListViewItemDown(ByVal _ListView As ListView)
If Not _ListView.SelectedItems(0).Index + 1 = _ListView.Items.Count Then
Dim toMove As ListViewItem
Dim oldIndex As Integer
oldIndex = _ListView.SelectedItems(0).Index
toMove = _ListView.SelectedItems(0)
_ListView.Items.Remove(toMove)
_ListView.Items.Insert(oldIndex + 1, toMove)
End If
End Sub
Saturday, May 26, 2018 11:19 AM
It's a nice & good starting point, but the second sub is likely to crash as soon as one tries to move down a list item in a multiselect-enabled listview and one of the listitems reaches the boundary of the listview. Furthermore, in a multiselect-enabled listview, these two subs behave differently.
Here is my approach, based on yours:
Private Sub tsbMoveUp_Click(sender As System.Object, e As System.EventArgs) Handles tsbMoveUp.Click
For Each li As ListViewItem In lvwFiles.Items
If li.Selected = True Then
Call moveListViewItemUp(lvwFiles, li.Index)
End If
Next
End Sub
Private Sub tsbMoveDown_Click(sender As System.Object, e As System.EventArgs) Handles tsbMoveDown.Click
For currentIndex As Integer = lvwFiles.Items.Count - 1 To 0 Step -1
Dim li As ListViewItem = lvwFiles.Items(currentIndex)
If li.Selected = True Then
Call moveListViewItemDown(lvwFiles, li.Index)
End If
Next
End Sub
Private Sub moveListViewItemUp(ByVal _ListView As ListView, ByVal selectedIndex As Integer)
Try
If Not _ListView.Items(selectedIndex).Index = 0 Then
Dim toMove As ListViewItem
Dim oldIndex As Integer
oldIndex = _ListView.Items(selectedIndex).Index
toMove = _ListView.Items(selectedIndex)
_ListView.Items.Remove(toMove)
_ListView.Items.Insert(oldIndex - 1, toMove)
End If
Catch ex As Exception
End Try
End Sub
Private Sub moveListViewItemDown(ByVal _ListView As ListView, ByVal selectedIndex As Integer)
Try
If Not _ListView.Items(selectedIndex).Index + 1 = _ListView.Items.Count Then
Dim toMove As ListViewItem
Dim oldIndex As Integer
oldIndex = _ListView.Items(selectedIndex).Index
toMove = _ListView.Items(selectedIndex)
_ListView.Items.Remove(toMove)
_ListView.Items.Insert(oldIndex + 1, toMove)
End If
Catch ex As Exception
End Try
End Sub