控件间托拽功能制作全过程.docx
- 文档编号:6163478
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:16
- 大小:89.72KB
控件间托拽功能制作全过程.docx
《控件间托拽功能制作全过程.docx》由会员分享,可在线阅读,更多相关《控件间托拽功能制作全过程.docx(16页珍藏版)》请在冰豆网上搜索。
控件间托拽功能制作全过程
控件间托拽功能制作全过程
本程序由本人编写,主要使用了数据库(SQL)技术,托拽技术和数据导出到EXCEL的技术.
这里我制作一个人员查寻的程序定名为”干部入井”系统.使用到的数据库.库的名子是按月份定名的.其有一个入井表.结构如下:
现在开始制作.首先制作界面如下:
这里我们使用了statusstrip对界面进行分割.他们的属性Dock要适当设置.这样界灵活.
接下来,进入代码部分.
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;
namespace干部入井
{
publicpartialclassForm1:
Form
{
//这段代码是用于数据库打开
SqlConnectionmyConn=newSqlConnection();
SqlCommandmyCom=newSqlCommand();
SqlDataAdaptermyAdp=newSqlDataAdapter();
//myDs用于存储几个重要表,用于生成treeview的节点
DataSetmyDs=newDataSet();
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse)
{
//这里是设置两个时间控件的显示格式.我们要精确选择.所以要同时显示日期和时间
DateTimedt=DateTime.Now;
intdays=DateTime.DaysInMonth(dt.Year,dt.Month);
dateTimePicker1.CustomFormat="yyyy-MM-ddHH:
mm:
ss";
dateTimePicker2.CustomFormat="yyyy-MM-ddHH:
mm:
ss";
dateTimePicker1.Format=System.Windows.Forms.DateTimePickerFormat.Custom;
dateTimePicker2.Format=System.Windows.Forms.DateTimePickerFormat.Custom;
dateTimePicker2.Text=dt.Year+"-"+dt.Month+"-"+dt.Day+"23:
00:
00";
dateTimePicker1.Text=dt.Year+"-"+dt.Month+"-100:
00:
00";}
//这是时间选择后用于调出数据并填充treeview的.
privatevoidbutton1_Click(objectsender,EventArgse)
{
intstrYear1,strMonth1,strYear2,strMonth2;
stringstr="";
strYear1=dateTimePicker1.Value.Year;
strMonth1=dateTimePicker1.Value.Month;
strYear2=dateTimePicker2.Value.Year;
strMonth2=dateTimePicker2.Value.Month;
//if(strYear1!
=strYear2&&strMonth1!
=strMonth2)
//{
//MessageBox.Show("不能跨年跨月操作!
");
//return;
//}if(strMonth1<10)
{
//这是数据库名
str="anjian"+strYear1.ToString()+"0"+strMonth1.ToString();
}
else
{
str="anjian"+strYear1.ToString()+strMonth1.ToString();
}
if(myConn!
=null)myConn.Close();
//密码自己设吧
myConn.ConnectionString="server=192.168.1.187;InitialCatalog="+str+";userId=sa;Password=****";
myConn.Open();
if(myDs.Tables.Count>0)myDs.Tables.Clear();
str="SELECTDISTINCT部门FROM升入井WHERE(DATEDIFF(day,入井,'";
str+=dateTimePicker1.Text;
str+="')<=0)and(DATEDIFF(day,升井,'";
str+=dateTimePicker2.Text;
str+="')>=0)";
myCom.CommandText=str;
myCom.Connection=myConn;
myAdp.SelectCommand=myCom;
myAdp.Fill(myDs,"dep");
str="SELECTDISTINCT部门,姓名FROM升入井WHERE(DATEDIFF(day,入井,'";
str+=dateTimePicker1.Text;
str+="')<=0)and(DATEDIFF(day,升井,'";
str+=dateTimePicker2.Text;
str+="')>=0)";
myCom.CommandText=str;
myCom.Connection=myConn;
myAdp.SelectCommand=myCom;
myAdp.Fill(myDs,"user");
str="SELECTDISTINCT职务FROM升入井WHERE(DATEDIFF(day,入井,'";
str+=dateTimePicker1.Text;
str+="')<=0)and(DATEDIFF(day,升井,'";
str+=dateTimePicker2.Text;
str+="')>=0)";
myCom.CommandText=str;
myCom.Connection=myConn;
myAdp.SelectCommand=myCom;
myAdp.Fill(myDs,"Post");
str="SELECTDISTINCT职务,姓名FROM升入井WHERE(DATEDIFF(day,入井,'";
str+=dateTimePicker1.Text;
str+="')<=0)and(DATEDIFF(day,升井,'";
str+=dateTimePicker2.Text;
str+="')>=0)";
myCom.CommandText=str;
myCom.Connection=myConn;
myAdp.SelectCommand=myCom;
myAdp.Fill(myDs,"user2");
treeChange();
}
privatebooltreeChange()
{
boolIsShangeSuccess=false;
if(treeView1.Nodes.Count>0)treeView1.Nodes.Clear();
treeView1.Nodes.Add("0","统计入井人数");
treeView1.Nodes.Add("1","部门入井人数");
treeView1.Nodes.Add("2","职务分类人数");
treeView1.Nodes.Add("3","班次分类人数");
treeView1.Nodes["3"].Nodes.Add("甲班");
treeView1.Nodes["3"].Nodes.Add("乙班");
treeView1.Nodes["3"].Nodes.Add("丙班");
for(inti=0;i { treeView1.Nodes["1"].Nodes.Add(myDs.Tables["dep"].Rows[i][0].ToString(),myDs.Tables["dep"].Rows[i][0].ToString()); } for(inti=0;i { treeView1.Nodes["1"].Nodes[myDs.Tables["user"].Rows[i][0].ToString()].Nodes.Add(myDs.Tables["user"].Rows[i][0].ToString(),myDs.Tables["user"].Rows[i][1].ToString()); } for(inti=0;i { treeView1.Nodes["2"].Nodes.Add(myDs.Tables["Post"].Rows[i][0].ToString(),myDs.Tables["Post"].Rows[i][0].ToString()); } for(inti=0;i { treeView1.Nodes["2"].Nodes[myDs.Tables["user2"].Rows[i][0].ToString()].Nodes.Add(myDs.Tables["user2"].Rows[i][0].ToString(),myDs.Tables["user2"].Rows[i][1].ToString()); } IsShangeSuccess=true; returnIsShangeSuccess; } } } 好了,这样我们就完成了对treeview的节点添加.下面我们开始制作托拽功能. 第一步先对控件的属性进行设置 treeview1和datagridview1的AllowDrop属性设为true,允许托拽. 在这里我们要完成的是从treeview1中托拽一条数据到datagridview中.计算机执行一条相关的查寻指令,而不是保把数据托到控件上那么简单.现在我们要定议方法了. 首先是treeview1的ItemDrag方法 privatevoidtreeView1_ItemDrag(objectsender,ItemDragEventArgse) { stringstrItem=e.Item.ToString(); //开始进行"Drag"操作 DoDragDrop(strItem,DragDropEffects.Copy|DragDropEffects.Move); } 接着是MouseDown方法 inttreeLevel=0; stringtreeC=""; privatevoidtreeView1_MouseDown(objectsender,MouseEventArgse) { //获取当前节点 TreeNodenode=treeView1.GetNodeAt(e.X,e.Y); if(node==null) { //如果当前点击的不是节点则将treeC置空,并返回 treeC=""; return; } //获取节点的完整路径 treeC=node.FullPath; //获取节点的层数. treeLevel=treeView1.GetNodeAt(e.X,e.Y).Level; } 这里的treeC是中用于指示我们点击了哪个节点,根据节点的不同来执行不同的代码. 下面我们开始对接收数据的datagridview1进行操作.先是它的DragEnter方法. privatevoiddataGridView1_DragEnter(objectsender,DragEventArgse) { if(e.Data.GetDataPresent(DataFormats.Text)) e.Effect=DragDropEffects.Move; else e.Effect=DragDropEffects.None; } 这样当我们在treeview1是托一个节点到datagridview1上时就会看到一个被托动的小块在鼠标箭头上. 现在datagridview1已经激活托拽功能.为下一步作了必要准备,现在工们再作一个准备工作,就是分析一下datagridview1激活后要完成什么功能. 第一是要分析我们托的是那个节点,再根据节点执行对应操作.节点已经存在treeC中了.现在我们将treeC拆分,并编写相应功能函数. privatevoidtreeOp(stringstr) { //完成路径的拆分,存在数组strTemp中. string[]strTemp; stringstrTemp1=str; intiIndexOfStr=str.IndexOf("\\"); if(treeLevel>0) { strTemp=newstring[treeLevel+1]; strTemp[0]=str.Substring(0,iIndexOfStr); strTemp1=str.Substring(iIndexOfStr+1).Trim();; for(inti=1;i { iIndexOfStr=strTemp1.IndexOf("\\"); if(iIndexOfStr>0) { strTemp[i]=strTemp1.Substring(0,iIndexOfStr).Trim(); strTemp1=strTemp1.Substring(iIndexOfStr+1); } } strTemp[treeLevel]=strTemp1.Trim(); } else { strTemp=newstring[1]; strTemp[0]=str; } stringstrS=""; switch(treeLevel) { case0: if(strTemp[0]=="统计入井人数") { strS="SELECT部门,姓名,COUNT(姓名)AS次数FROM升入井WHERE(DATEDIFF(day,入井,'"; strS+=dateTimePicker1.Text; strS+="')<=0)and(DATEDIFF(day,升井,'"; strS+=dateTimePicker2.Text; strS+="')>=0)GROUPBY部门,姓名orderby部门"; } elseif(strTemp[0]=="部门入井人数") { strS="SELECT部门,COUNT(部门)AS人次FROM升入井WHERE(DATEDIFF(day,入井,'"; strS+=dateTimePicker1.Text; strS+="')<=0)and(DATEDIFF(day,升井,'"; strS+=dateTimePicker2.Text; strS+="')>=0)GROUPBY部门"; } elseif(strTemp[0]=="职务分类人数") { strS="SELECT职务,COUNT(职务)AS人次FROM升入井WHERE(DATEDIFF(day,入井,'"; strS+=dateTimePicker1.Text; strS+="')<=0)and(DATEDIFF(day,升井,'"; strS+=dateTimePicker2.Text; strS+="')>=0)GROUPBY职务"; } else { strS="SELECT班种,COUNT(班种)AS人次FROM升入井WHERE(DATEDIFF(day,入井,'"; strS+=dateTimePicker1.Text; strS+="')<=0)and(DATEDIFF(day,升井,'"; strS+=dateTimePicker2.Text; strS+="')>=0)GROUPBY班种"; } break; case1: if(strTemp[0]=="部门入井人数") { strS="SELECT姓名,COUNT(姓名)AS次数FROM升入井WHERE(部门='"; strS+=strTemp[1]; strS+="')and(DATEDIFF(day,入井,'"; strS+=dateTimePicker1.Text; strS+="')<=0)and(DATEDIFF(day,升井,'"; strS+=dateTimePicker2.Text; strS+="')>=0)GROUPBY姓名"; } elseif(strTemp[0]=="职务分类人数") { strS="SELECT部门,COUNT(姓名)AS次数FROM升入井WHERE(职务='"; strS+=strTemp[1]; strS+="')and(DATEDIFF(day,入井,'"; strS+=dateTimePicker1.Text; strS+="')<=0)and(DATEDIFF(day,升井,'"; strS+=dateTimePicker2.Text; strS+="')>=0)GROUPBY部门"; } else { strS="SELECT部门,职务,姓名,入井,升井FROM升入井WHERE(班种='"; strS+=strTemp[1]; strS+="')and(DATEDIFF(day,入井,'"; strS+=dateTimePicker1.Text; strS+="')<=0)and(DATEDIFF(day,升井,'"; strS+=dateTimePicker2.Text; strS+="')>=0)orderby部门"; } break; case2: if(strTemp[0]=="部门入井人数") { strS="SELECT工号,姓名,部门,班种,职务,入井,升井,工作时长FROM升入井WHERE(部门='"; strS+=strTemp[1]; strS+="')AND(姓名='"; strS+=strTemp[2]; strS+="')and(DATEDIFF(day,入井,'"; strS+=dateTimePicker1.Text; strS+="')<=0)and(DATEDIFF(day,升井,'"; strS+=dateTimePicker2.Text; strS+="')>=0)"; } elseif(strTemp[0]=="职务分类人数") { strS="SELECT工号,姓名,部门,班种,职务,入井,升井,工作时长FROM升入井WHERE(职务='"; strS+=strTemp[1]; strS+="')AND(姓名='"; strS+=strTemp[2]; strS+="')and(DATEDIFF(day,入井,'"; strS+=dateTimePicker1.Text; strS+="')<=0)and(DATEDIFF(day,升井,'"; strS+=dateTimePicker2.Text; strS+="')>=0)"; } else { } break; default: break; } DataTabledt=newDataTable(); myCom.CommandText=strS; myCom.Connection=myConn; myAdp.SelectCommand=myCom; myAdp.Fill(dt); dataGridView1.DataSource=dt.DefaultView; } 接下来编托拽的最重要一步,执行功能代码 //这里是托拽的核心执行部分 privatevoiddataGridView1_DragDrop(objectsender,DragEventArgse) { stringdummy="temp"; //获得进行"Drag"操作中拖动的字符串 strings=(string)e.Data.GetData(dummy.GetType()); dummy=s.Substring(s.IndexOf(": ")+1).Trim(); stringstr=""; 项目.Text=du
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 控件 间托拽 功能 制作 全过程
![提示](https://static.bdocx.com/images/bang_tan.gif)