您的位置:首页 > 其它

关于WInform中listbox鼠标拖动上下排序item的问题解决

2009-12-17 10:05 495 查看
最近鼓弄这个地方好长时间 在网上搜罗 这块儿的东东好少哟

不过有代码的 我调试了 总没反应

后来终于解决 原因是我的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

大家加油
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐