ListView拖入TreeView(100分) 我做学生管理系统, 右边的ListView 学生。。 拖入左边的 TreeView 班级中 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #region //导航叶开始拖动 private void listViewNavigator_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e) { //鼠标右键禁止拖动 if ( e.Button == MouseButtons.Right ) return ; //无选择项禁止拖动 if ( listViewNavigator.SelectedItems.Count == 0 ) return ; //开始拖放操作 this.listViewNavigator.DoDragDrop(Pub.NavigatorDragString, DragDropEffects.Copy | DragDropEffects.Move ) ; } #endregion #region //导航叶拖动项抵达导航树 private void treeViewNavigator_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) { //判断是否目前拖动的数据是指定的字符串 string DragTagString = (string)e.Data.GetData("Temp".GetType()) ; if ( DragTagString == Pub.NavigatorDragString ) e.Effect = DragDropEffects.Copy ; else e.Effect = DragDropEffects.None ; } #endregion #region //导航叶拖动项在导航树中移动 private void treeViewNavigator_DragOver(object sender, System.Windows.Forms.DragEventArgs e) { //判断是否目前拖动的数据是指定的字符串 string DragTagString = (string)e.Data.GetData("Temp".GetType()) ; if ( DragTagString != Pub.NavigatorDragString ) { e.Effect = DragDropEffects.None ; return ; } //导航树自动滚动 Point pt = this.treeViewNavigator.PointToClient(new Point(e.X, e.Y)) ; int h = 10; if ( pt.Y + h > this.treeViewNavigator.ClientSize.Height ) API.SendMessage(this.treeViewNavigator.Handle, API.WM_VSCROLL, API.SB_LINEDOWN, 0) ; else if ( pt.Y < h ) API.SendMessage(this.treeViewNavigator.Handle, API.WM_VSCROLL, API.SB_LINEUP, 0) ; if ( pt.X + h > this.treeViewNavigator.ClientSize.Width ) API.SendMessage(this.treeViewNavigator.Handle, API.WM_HSCROLL, API.SB_LINERIGHT, 0) ; else if ( pt.X < h ) API.SendMessage(this.treeViewNavigator.Handle, API.WM_HSCROLL, API.SB_LINELEFT, 0) ; //获取鼠标指针位置 Point Position = new Point(0, 0) ; Position.X = e.X ; Position.Y = e.Y ; Position = treeViewNavigator.PointToClient(Position) ; TreeNode DropNode = this.treeViewNavigator.GetNodeAt(Position) ; if ( DropNode != null ) { TreeViewColorReset(this.treeViewNavigator) ; //延时自动展开当前节点 Pub.MarkNode = DropNode ; this.timerExpandNode.Enabled = true ; //标记当前节点颜色 DropNode.BackColor = Color.Navy ; DropNode.ForeColor = Color.White ; e.Effect = DragDropEffects.Copy ; } else { TreeViewColorReset(this.treeViewNavigator) ; e.Effect = DragDropEffects.None ; } } #endregion #region //拖动项离开导航树 private void treeViewNavigator_DragLeave(object sender, System.EventArgs e) { //重置树节点颜色 TreeViewColorReset(this.treeViewNavigator) ; } #endregion #region //导航叶拖动项放入导航树 private void treeViewNavigator_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { //获取鼠标指针位置上的树节点 Point Position = new Point(0, 0) ; Position.X = e.X ; Position.Y = e.Y ; Position = treeViewNavigator.PointToClient(Position) ; TreeNode DropNode = this.treeViewNavigator.GetNodeAt(Position) ; //移动源与移动目标相同 if ( DropNode.Tag == this.treeViewNavigator.SelectedNode.Tag ) return ; //确认移动 if ( DialogResult.Cancel == MessageBox.Show("是否真的将所选项移动到导航语音目录 [ " + DropNode.Text + " ] ?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) ) { TreeViewColorReset(this.treeViewNavigator) ; //重置树节点颜色 return ; } //添加所选项到指定导航树节点 XmlDocument doc = new XmlDocument(); doc.Load(Pub.XMLNavigator); //获取拖动目标树节点 string tagPath = "//Navigator[@ID=\"" + DropNode.Tag.ToString() + "\"]" ; XmlNode tagNode = doc.DocumentElement.SelectSingleNode(tagPath) ; //循环处理选择项 for ( int i = 0; i < listViewNavigator.SelectedItems.Count; i++ ) { //获取当前XML叶节点 string XPath = "//Navigator[@ID=\"" + listViewNavigator.SelectedItems[i].Tag.ToString() + "\"]" ; XmlNode curNode = doc.DocumentElement.SelectSingleNode(XPath) ; //克隆当前XML叶节点 XmlNode cpyNode = curNode.CloneNode(false) ; //删除当前XML叶节点 curNode.ParentNode.RemoveChild(curNode) ; //添加克隆XML叶节点到新位置 tagNode.AppendChild(cpyNode) ; } doc.Save(Pub.XMLNavigator) ; //删除ListView导航叶 while ( listViewNavigator.SelectedItems.Count != 0 ) this.listViewNavigator.SelectedItems[0].Remove() ; //确定焦点 if ( this.listViewNavigator.Items.Count == 0 ) this.treeViewNavigator.Select() ; else { listViewNavigator.Items[listViewNavigator.Items.Count - 1].Focused= true ; listViewNavigator.Items[listViewNavigator.Items.Count - 1].Selected = true ; listViewNavigator.Select() ; } //重置树节点颜色 TreeViewColorReset(this.treeViewNavigator) ; } #endregion /// <summary> /// 把指定的AlarmTag的AreaID修改为指定的值(对应于TAlarmTag的AreaID栏位)(重载2次) /// </summary> /// <param name="areaIdList">要修改的AreaID</param> /// <param name="modifiedAreaId">修改后的值</param> /// <res>此方法用于删除节点后</res> private void ModifyAreaIdOfTag(List<string> areaIdList, int modifiedAreaId) { DataFactory temp = new DataFactory("AlarmSystem"); this.tagTable = temp.FetchTable("TAlarmTag"); DataTable modifyTable = this.tagTable.Clone(); this.tagView = new DataView(this.tagTable); // 遍历要修改的AreaID,然后修改AreaID为参数中指定的值 foreach (string areaId in areaIdList) { this.tagView.RowFilter = "AreaID = " + areaId; foreach (DataRowView row in this.tagView) { DataRow newRow = modifyTable.NewRow(); newRow["TagID"] = row["TagID"]; newRow["TagName"] = row["TagName"]; newRow["ScanMode"] = row["ScanMode"]; newRow["MessageCHS"] = row["MessageCHS"]; newRow["MessageCHT"] = row["MessageCHT"]; newRow["Solution"] = row["Solution"]; newRow["AreaID"] = modifiedAreaId; modifyTable.Rows.Add(newRow); } } temp.UpdateData("ProcUpdateTAlarmTag", this.tagColumnName, modifyTable, false); } /// <summary> /// 把指定的AlarmTag修改为指定的值(对应于TAlarmTag的AreaID栏位)(重载2次) /// </summary> /// <param name="items">要修改的AlarmTag的集合</param> /// <param name="modifiedAreaId">修改后的值</param> /// <res>此方法用于拖放Tag到其他节点</res> private void ModifyAreaIdOfTag(ListView.SelectedListViewItemCollection items, int modifiedAreaId) { DataTable modifyTable = this.tagTable.Clone(); if (items != null) { List<int> tagIdList = new List<int>(); foreach (ListViewItem item in items) { tagIdList.Add(Convert.ToInt32(item.SubItems["TagID"].Text)); } DataFactory temp = new DataFactory("AlarmSystem"); temp.UpdateRecord("TAlarmTag", "TagID", "AreaID", tagIdList, modifiedAreaId.ToString()); } }你可以把当前选中的listview里信息调用方法传到你要放的tree节点下,用数据库的一个栏位关联 大哥~~~ Pub是什么东东呀?? this.listViewNavigator.DoDragDrop(Pub.NavigatorDragString, DragDropEffects.Copy | DragDropEffects.Move ) Pub 是什么 在线等!!!!!!!!! 100分请教两个问题 Winform中Socket类的Send函数的问题 如何操作Datagrid换列? 要在word中加一个按钮 各位大哥帮帮忙 帮我解释一下程序!!!!!有分哦~~ c#有控件数组吗? 軟件開發語言的走向﹗ 高分求助:真的没人知道吗?如何在用Bitmap.Save输出Gif文件时,控制生成gif文件的颜色数?默认都是256色的,我想要32色或16色的 C#中关于目录树的问题 我是新人,不知道怎么开始学.net.
private void listViewNavigator_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
//鼠标右键禁止拖动
if ( e.Button == MouseButtons.Right ) return ;
//无选择项禁止拖动
if ( listViewNavigator.SelectedItems.Count == 0 ) return ;
//开始拖放操作
this.listViewNavigator.DoDragDrop(Pub.NavigatorDragString, DragDropEffects.Copy | DragDropEffects.Move ) ;
}
#endregion
#region //导航叶拖动项抵达导航树
private void treeViewNavigator_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
//判断是否目前拖动的数据是指定的字符串
string DragTagString = (string)e.Data.GetData("Temp".GetType()) ;
if ( DragTagString == Pub.NavigatorDragString )
e.Effect = DragDropEffects.Copy ;
else
e.Effect = DragDropEffects.None ;
}
#endregion
#region //导航叶拖动项在导航树中移动
private void treeViewNavigator_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
//判断是否目前拖动的数据是指定的字符串
string DragTagString = (string)e.Data.GetData("Temp".GetType()) ;
if ( DragTagString != Pub.NavigatorDragString )
{
e.Effect = DragDropEffects.None ;
return ;
}
//导航树自动滚动
Point pt = this.treeViewNavigator.PointToClient(new Point(e.X, e.Y)) ;
int h = 10;
if ( pt.Y + h > this.treeViewNavigator.ClientSize.Height )
API.SendMessage(this.treeViewNavigator.Handle, API.WM_VSCROLL, API.SB_LINEDOWN, 0) ;
else if ( pt.Y < h )
API.SendMessage(this.treeViewNavigator.Handle, API.WM_VSCROLL, API.SB_LINEUP, 0) ;
if ( pt.X + h > this.treeViewNavigator.ClientSize.Width )
API.SendMessage(this.treeViewNavigator.Handle, API.WM_HSCROLL, API.SB_LINERIGHT, 0) ;
else if ( pt.X < h )
API.SendMessage(this.treeViewNavigator.Handle, API.WM_HSCROLL, API.SB_LINELEFT, 0) ;
//获取鼠标指针位置
Point Position = new Point(0, 0) ;
Position.X = e.X ;
Position.Y = e.Y ;
Position = treeViewNavigator.PointToClient(Position) ;
TreeNode DropNode = this.treeViewNavigator.GetNodeAt(Position) ;
if ( DropNode != null )
{
TreeViewColorReset(this.treeViewNavigator) ;
//延时自动展开当前节点
Pub.MarkNode = DropNode ;
this.timerExpandNode.Enabled = true ;
//标记当前节点颜色
DropNode.BackColor = Color.Navy ;
DropNode.ForeColor = Color.White ;
e.Effect = DragDropEffects.Copy ;
}
else
{
TreeViewColorReset(this.treeViewNavigator) ;
e.Effect = DragDropEffects.None ;
}
}
#endregion
#region //拖动项离开导航树
private void treeViewNavigator_DragLeave(object sender, System.EventArgs e)
{
//重置树节点颜色
TreeViewColorReset(this.treeViewNavigator) ;
}
#endregion
#region //导航叶拖动项放入导航树
private void treeViewNavigator_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
//获取鼠标指针位置上的树节点
Point Position = new Point(0, 0) ;
Position.X = e.X ;
Position.Y = e.Y ;
Position = treeViewNavigator.PointToClient(Position) ;
TreeNode DropNode = this.treeViewNavigator.GetNodeAt(Position) ;
//移动源与移动目标相同
if ( DropNode.Tag == this.treeViewNavigator.SelectedNode.Tag )
return ;
//确认移动
if ( DialogResult.Cancel == MessageBox.Show("是否真的将所选项移动到导航语音目录 [ " + DropNode.Text + " ] ?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) )
{
TreeViewColorReset(this.treeViewNavigator) ; //重置树节点颜色
return ;
}
//添加所选项到指定导航树节点
XmlDocument doc = new XmlDocument();
doc.Load(Pub.XMLNavigator);
//获取拖动目标树节点
string tagPath = "//Navigator[@ID=\"" + DropNode.Tag.ToString() + "\"]" ;
XmlNode tagNode = doc.DocumentElement.SelectSingleNode(tagPath) ;
//循环处理选择项
for ( int i = 0; i < listViewNavigator.SelectedItems.Count; i++ )
{
//获取当前XML叶节点
string XPath = "//Navigator[@ID=\"" + listViewNavigator.SelectedItems[i].Tag.ToString() + "\"]" ;
XmlNode curNode = doc.DocumentElement.SelectSingleNode(XPath) ;
//克隆当前XML叶节点
XmlNode cpyNode = curNode.CloneNode(false) ;
//删除当前XML叶节点
curNode.ParentNode.RemoveChild(curNode) ;
//添加克隆XML叶节点到新位置
tagNode.AppendChild(cpyNode) ;
}
doc.Save(Pub.XMLNavigator) ;
//删除ListView导航叶
while ( listViewNavigator.SelectedItems.Count != 0 )
this.listViewNavigator.SelectedItems[0].Remove() ;
//确定焦点
if ( this.listViewNavigator.Items.Count == 0 )
this.treeViewNavigator.Select() ;
else
{
listViewNavigator.Items[listViewNavigator.Items.Count - 1].Focused= true ;
listViewNavigator.Items[listViewNavigator.Items.Count - 1].Selected = true ;
listViewNavigator.Select() ;
}
//重置树节点颜色
TreeViewColorReset(this.treeViewNavigator) ;
}
#endregion
/// 把指定的AlarmTag的AreaID修改为指定的值(对应于TAlarmTag的AreaID栏位)(重载2次)
/// </summary>
/// <param name="areaIdList">要修改的AreaID</param>
/// <param name="modifiedAreaId">修改后的值</param>
/// <res>此方法用于删除节点后</res>
private void ModifyAreaIdOfTag(List<string> areaIdList, int modifiedAreaId)
{
DataFactory temp = new DataFactory("AlarmSystem");
this.tagTable = temp.FetchTable("TAlarmTag");
DataTable modifyTable = this.tagTable.Clone(); this.tagView = new DataView(this.tagTable); // 遍历要修改的AreaID,然后修改AreaID为参数中指定的值
foreach (string areaId in areaIdList)
{
this.tagView.RowFilter = "AreaID = " + areaId;
foreach (DataRowView row in this.tagView)
{
DataRow newRow = modifyTable.NewRow();
newRow["TagID"] = row["TagID"];
newRow["TagName"] = row["TagName"];
newRow["ScanMode"] = row["ScanMode"];
newRow["MessageCHS"] = row["MessageCHS"];
newRow["MessageCHT"] = row["MessageCHT"];
newRow["Solution"] = row["Solution"];
newRow["AreaID"] = modifiedAreaId;
modifyTable.Rows.Add(newRow);
}
} temp.UpdateData("ProcUpdateTAlarmTag", this.tagColumnName, modifyTable, false);
} /// <summary>
/// 把指定的AlarmTag修改为指定的值(对应于TAlarmTag的AreaID栏位)(重载2次)
/// </summary>
/// <param name="items">要修改的AlarmTag的集合</param>
/// <param name="modifiedAreaId">修改后的值</param>
/// <res>此方法用于拖放Tag到其他节点</res>
private void ModifyAreaIdOfTag(ListView.SelectedListViewItemCollection items, int modifiedAreaId)
{
DataTable modifyTable = this.tagTable.Clone(); if (items != null)
{
List<int> tagIdList = new List<int>();
foreach (ListViewItem item in items)
{
tagIdList.Add(Convert.ToInt32(item.SubItems["TagID"].Text));
} DataFactory temp = new DataFactory("AlarmSystem");
temp.UpdateRecord("TAlarmTag", "TagID", "AreaID", tagIdList, modifiedAreaId.ToString());
}
}你可以把当前选中的listview里信息调用方法传到你要放的tree节点下,用数据库的一个栏位关联