您的位置:首页 > 其它

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

2010-03-12 17:59 344 查看
最近鼓弄这个地方好长时间 在网上搜罗 这块儿的东东好少哟

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

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



http://student.csdn.net/space.php?uid=110991&do=blog&id=18990
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐