控件间托拽功能制作全过程Word格式文档下载.docx
《控件间托拽功能制作全过程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《控件间托拽功能制作全过程Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
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="
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+"
-100:
//这是时间选择后用于调出数据并填充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
+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();
SELECTDISTINCT部门FROM升入井WHERE(DATEDIFF(day,入井,'
str+=dateTimePicker1.Text;
str+="
'
)<
=0)and(DATEDIFF(day,升井,'
str+=dateTimePicker2.Text;
)>
=0)"
myCom.CommandText=str;
myCom.Connection=myConn;
myAdp.SelectCommand=myCom;
myAdp.Fill(myDs,"
dep"
SELECTDISTINCT部门,姓名FROM升入井WHERE(DATEDIFF(day,入井,'
user"
SELECTDISTINCT职务FROM升入井WHERE(DATEDIFF(day,入井,'
Post"
SELECTDISTINCT职务,姓名FROM升入井WHERE(DATEDIFF(day,入井,'
user2"
treeChange();
privatebooltreeChange()
boolIsShangeSuccess=false;
if(treeView1.Nodes.Count>
0)treeView1.Nodes.Clear();
treeView1.Nodes.Add("
"
统计入井人数"
1"
部门入井人数"
2"
职务分类人数"
3"
班次分类人数"
treeView1.Nodes["
].Nodes.Add("
甲班"
乙班"
丙班"
for(inti=0;
i<
myDs.Tables["
].Rows.Count;
i++)
].Nodes.Add(myDs.Tables["
].Rows[i][0].ToString(),myDs.Tables["
].Rows[i][0].ToString());
].Nodes[myDs.Tables["
].Rows[i][0].ToString()].Nodes.Add(myDs.Tables["
].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;
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;
treeLevel;
iIndexOfStr=strTemp1.IndexOf("
if(iIndexOfStr>
strTemp[i]=strTemp1.Substring(0,iIndexOfStr).Trim();
strTemp1=strTemp1.Substring(iIndexOfStr+1);
strTemp[treeLevel]=strTemp1.Trim();
{
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+="
strS+=dateTimePicker2.Text;
=0)GROUPBY部门,姓名orderby部门"
elseif(strTemp[0]=="
strS="
SELECT部门,COUNT(部门)AS人次FROM升入井WHERE(DATEDIFF(day,入井,'
=0)GROUPBY部门"
SELECT职务,COUNT(职务)AS人次FROM升入井WHERE(DATEDIFF(day,入井,'
=0)GROUPBY职务"
SELECT班种,COUNT(班种)AS人次FROM升入井WHERE(DATEDIFF(day,入井,'
=0)GROUPBY班种"
break;
case1:
SELECT姓名,COUNT(姓名)AS次数FROM升入井WHERE(部门='
strS+=strTemp[1];
strS+="
)and(DATEDIFF(day,入井,'
=0)GROUPBY姓名"
SELECT部门,COUNT(姓名)AS次数FROM升入井WHERE(职务='
strS+=strTemp[1];
SELECT部门,职务,姓名,入井,升井FROM升入井WHERE(班种='
=0)orderby部门"
case2:
SELECT工号,姓名,部门,班种,职务,入井,升井,工作时长FROM升入井WHERE(部门='
strS+=strTemp[1];
strS+="
)AND(姓名='
strS+=strTemp[2];
=0)"
SELECT工号,姓名,部门,班种,职务,入井,升井,工作时长FROM升入井WHERE(职务='
strS+=strTemp[2];
default:
DataTabledt=newDataTable();
myCom.CommandText=strS;
myAdp.Fill(dt);
dataGridView1.DataSource=dt.DefaultView;
接下来编托拽的最重要一步,执行功能代码
//这里是托拽的核心执行部分
privatevoiddataGridView1_DragDrop(objectsender,DragEventArgse)
stringdummy="
temp"
//获得进行"
操作中拖动的字符串
strings=(string)e.Data.GetData(dummy.GetType());
dummy=s.Substring(s.IndexOf("
:
)+1).Trim();
项目.Text=du