关于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
大家加油
不过有代码的 我调试了 总没反应
后来终于解决 原因是我的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的问题解决
- 关于WInform中listbox鼠标拖动上下排序item的问题解决
- 关于Android中Listview的item点击不响应问题的解决
- [原创]关于“ASP.NET MVC Preview 5使用中,只有MVC Project模板,没有MVC Item 模板(MVC Item Template)的问题”解决
- 按住鼠标不松无法实现div拖动的问题解决
- 关于使用android Eclipse按ctrl+鼠标左键或者F5出现source not found的问题如何解决
- 关于RecyclerView实现瀑布流,上下滑动时item之间互换位置的问题
- 记录下关于Synergy 客户端鼠标无响应问题的解决办法
- 关于Winform中rdlc报表内存溢出问题解决方案
- [WinForm]ListBox的Item上下移动
- 关于List<Model>类型 GridView排序问题的解决
- android 图片缩放后划屏拖动图片与Viewpager切换Item冲突(拖动图片的事件相应被屏蔽)问题解决
- linq 解决winForm中控件CheckedListBox操作的问题。(转载)
- 解决一个mysql关于按文章以及评论的最早时间的排序问题
- winform 在mdi窗口重绘界面时,mdi挡住主窗体,导致鼠标拖动缩放窗体大小失效的解决方法随笔
- 关于mschart的X轴时间显示问题,时间始终是从0到24小时排序,不是零点分界,错误解决办法
- android app -- 关于listview的几种用法(复用,不复用,半复用)解决item状态改变的问题
- 关于UITabbarItem在iOS 8 上显示不知道哪里来的蓝色并且模糊的问题解决办法
- 关于RecyclerView实现瀑布流,上下滑动时item之间互换位置的问题
- 关于解决ListCtrl的头标题栏的鼠标状态问题的简单做法