本文主要是介绍关于WInform中listbox鼠标拖动上下排序item的问题解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近鼓弄这个地方好长时间 在网上搜罗 这块儿的东东好少哟
不过有代码的 我调试了 总没反应
后来终于解决 原因是我的listbox的datasource是绑定一个datatable的
so ... 从dt下手 代码如下
1、没datasource绑定的
private void lsb_Para_DragDrop(object sender, DragEventArgs e)
{
ListBox listbox = (ListBox)sender;
indexoftarget = listbox.IndexFromPoint(listbox.PointToClient(new Point(e.X, e.Y)));
if (indexoftarget != ListBox.NoMatches)
{
listbox.Items.RemoveAt(indexofsource);
listbox.Items.Insert(indexoftarget, obj);
listbox.SelectedIndex = indexoftarget;
}
}
private void lsb_Para_DragOver(object sender, DragEventArgs e)
{
//拖动源和放置的目的地一定是一个ListBox
if (e.Data.GetDataPresent(typeof(System.String)) && ((ListBox)sender).Equals(lsb_Para))
{
e.Effect = DragDropEffects.Move;
}
else
e.Effect = DragDropEffects.None;
}
private void lsb_Para_MouseDown(object sender, MouseEventArgs e)
{
indexofsource = ((ListBox)sender).IndexFromPoint(e.X, e.Y);
if (indexofsource != ListBox.NoMatches)
{
((ListBox)sender).DoDragDrop(((ListBox)sender).Items[indexofsource].ToString(), DragDropEffects.Move);
}
}
2、有绑定的
private void lsb_Visible_DragDrop(object sender, DragEventArgs e)
{
ListBox listbox = (ListBox)sender;
indexoftarget = listbox.IndexFromPoint(listbox.PointToClient(new Point(e.X, e.Y)));
if (indexoftarget != ListBox.NoMatches)
{
object obj = listbox.Items[indexofsource];
DataTable dt = (DataTable)listbox.DataSource;
DataRow dr = dt.NewRow();
dr["id"] = dt.Rows[indexofsource][0].ToString();
dr["hang_name"] = dt.Rows[indexofsource][1].ToString();
dt.Rows.RemoveAt(indexofsource);
dt.Rows.InsertAt(dr, indexoftarget);
listbox.SelectedIndex = indexoftarget;
for (int i = 0; i < dt.Rows.Count; i++)
{
string sql_updte = "update t_opr_hang set hang_paixu=" + (i + 1) + "where id=" + dt.Rows[i][0];
try
{
dbc.ExecuteSql(sql_updte);
Bind_Lsb_Para();
}
catch { }
}
}
}
private void lsb_Visible_DragOver(object sender, DragEventArgs e)
{
//拖动源和放置的目的地一定是一个ListBox
if (e.Data.GetDataPresent(typeof(System.String)) && ((ListBox)sender).Equals(lsb_Visible))
{
e.Effect = DragDropEffects.Move;
}
else
e.Effect = DragDropEffects.None;
}
private void lsb_Visible_MouseDown(object sender, MouseEventArgs e)
{
indexofsource = ((ListBox)sender).IndexFromPoint(e.X, e.Y);
if (indexofsource != ListBox.NoMatches)
{
((ListBox)sender).DoDragDrop(((ListBox)sender).Items[indexofsource].ToString(), DragDropEffects.Move);
}
}
区别在于从dt操作还是直接remove和insert
大家加油
这篇关于关于WInform中listbox鼠标拖动上下排序item的问题解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!