树TreeView(3)——树TreeView实战:话术开发

一、话术脚本概念

1、话术脚本、知识库、FAQ:坐席对着念给客户的东西。好记性不如破电脑。

2、要素:标题、正文。

二、话术管理设计

1、开发步骤:

(1)设计数据库表;

(2)设计取得各级数据的方法;

(3)设计界面,将表中的数据加载到TreeView中,为了能够在点击节点的时候将节点的正文填充到文本框中,因此将每个节点对应的Model放到节点的Tag中;

(4)设计话术的添加、删除、修改、查找等功能。

 

2、树状结构表设计,表名T_Scripts,字段: Id、Title(NVarchar(50),标题)、Msg( NVarchar(MAX),正文)、ParentId 。

3、ParentId为节点的父节点的主键值,第一级节点的ParentId为0。录入初始数据。

三、话术开发

1、BLL中需要增加查询方法:

GetDataByParentId( select * from T_Scripts where ParentId=@ParentId )

2、将T_Scripts表中的数据加载到TreeView中的算法:

(1)调用GetDataByParentId方法将第一级节点的数据加载到treeview.Nodes。加载节点的时候将节点对应的T_ScriptsRow对象设置到节点的Tag属性上。

(2)遍历第一级节点,将以第一级节点对应的数据行为Parent的节点加载到treenode.Nodes子节点上。

(3)遍历第二级节点,重复……

 

3、发现加载的规律,无论是哪级节点都是“将查询出来的模型填充到treeview.Nodes或者treenode.Nodes中”, treeview.Nodes 和 treenode.Nodes都是TreeNodeCollection类型,因此设计方法Fill(TreeNodeCollection nodes,IEnumerable<T_Scripts> scripts) 。

4、编写Fill的实现代码:遍历scripts每一行,调用nodes.Add添加节点,将row的Text设置为节点的Text 。

5、调用Fill方法将GetDataByParentId方法返回的第一级数据填充到TreeView上。

6、怎么填充其他级次呢?遍历添加每个节点的时候都继续“将以我对应的row为Parent的行添加到我的Nodes中”,因此完善Fill方法,自己调用自己。

7、调试的方法查看每步执行结果,理解为什么这么设计。

8、将model对象设置到节点的Tag属性上。

9、点击节点在右边显示话术脚本,响应TreeView控件的AfterSelect事件,从节点的Tag中取出来此节点对应的T_Scripts,然后显示到TextBox中。

10、节点的编辑(增加工具栏):

(1)开发节点编辑对话框,由于需要将编辑前节点的Title、Msg传递给对话框,并且的都爱用户设置的新值,设计ScriptTitle、ScriptMessage两个属性。

(2)修改节点Tag上的T_Scripts的属性,然后调用Update方法将修改保存到数据库。

(3)需要刷新当前选择节点的界面显示。

 

11、增加一级节点:

(1)弹出节点编辑对话框。

(2)将节点设置调用AddNew方法插入数据库。

(3)调用Get(id)方法将刚插入的数据检索出来。

(4)调用treeview.Nodes.Add增加新节点,并且按照加载时的逻辑进行节点的Tag、Text设置(可以把代码抽象到一个函数中)。

 

12、增加非一级节点:

(1)弹出节点编辑对话框。

(2)将节点设置调用adapter的Insert方法插入数据库。

(3)调用adapter的GetDataById方法将刚插入的数据检索出来。

(4)调用treenode.Nodes.Add增加新节点,并且按照加载时的逻辑进行节点的Tag、Text设置(可以把代码抽象到一个函数中)。

 

13、删除节点算法设计:

(1)删除节点包含删除数据库中的对应数据和删除界面上的节点两部分工作:

①删除数据库中的节点则要:如果节点有子节点则先删除子节点,再删除自己;如果子节点还有子节点,则先删除子节点的子节点,再删除子节点。又是一个递归。

②删除界面上的节点调用TreeNode的Remove方法自杀即可。

(2)步骤:

①数据库中增加DeleteById方法,根据主键删除数据。

②在BLL中增加一个T_scriptsBiz类,增加一个DeleteScriptById方法,用来根据话术Id删除话术,在其中调用GetDataByParentId方法判断Id对应的节点是否有子节点,如果有子节点则首先调用DeleteScriptById方法删除子节点,否则调用DeleteScriptById方法删除当前节点。

③调用当前选择节点TreeNode的Remove方法将自己从TreeView中删除。

 

14、话术的搜索功能:在Name和Body里搜索包含指定搜索词的节点,将找到的节点高亮显示。node.BackColor = Color.Red;

node.BackColor = Color.Red;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值