select ( select count(*) from _Attachment where tf_moduleId = '7010' and tf_moduleIdValue = _t7010.tf_provinceId ) as tf_attachmentCount , getAttachmentNames( '7010', _t7010.tf_provinceId ) as tf_attachmentTooltip , _t7010.tf_provinceId as tf_provinceId , _t7010.tf_name as tf_name , _t7010.tf_shortname as tf_shortname , _t7010.tf_district as tf_district , _t7010.tf_area as tf_area , _t7010.tf_numberOfPeople as tf_numberOfPeople , _t7010.tf_GDP as tf_GDP , ( _t7010.tf_GDP / _t7010.tf_numberOfPeople) as tf_averageGDP , _t7010.tf_percent as tf_percent , _t7010.tf_isMunicipality as tf_isMunicipality , _t7010.tf_createDate as tf_createDate , ( (datediff(now(), _t7010.tf_createDate))) as tf_days , _t7010.tf_orderId as tf_orderId , _t7010.tf_map as tf_map , _t7010.tf_remark as tf_remark , _t7010.tf_auditingName as tf_auditingName , _t7010.tf_auditingDate as tf_auditingDate , _t7010.tf_auditingRemark as tf_auditingRemark , _t7010.tf_auditinged as tf_auditinged , _t7010.tf_inputmen as tf_inputmen , _t7010.tf_inputdate as tf_inputdate , ( select count(*) from City _t7012 left outer join Province _child_t7010 on _child_t7010.tf_provinceId = _t7012.tf_provinceId where ( ( _child_t7010.tf_provinceId=_t7010.tf_provinceId ) ) ) as C_City from Province _t7010 limit ?在上面可以看到select后的第一个字段就附件个数的字段 tf_attachmentCount ,这一个比较好理解。第二个字段稍微有些意思,他返回的是附件的tooltip值,就是上面图片中的那4条记录,前面是附件的名称,后面跟着附件的文件名。这个功能是用自定义函数来完成的。函数的完整代码如下:这个函数入口参数有二个,一个是模块id,一个是记录id,返回的是一个字符串,里面把该记录的所有的附件的名称和文件名都加进去了。
CREATE DEFINER=`root`@`localhost` FUNCTION `getAttachmentNames`( moduleid varchar(10) , keyid varchar(50)) RETURNS varchar(4000) CHARSET gb2312 BEGIN DECLARE pid INT(11); DECLARE ptitle VARCHAR(50); DECLARE pfilename VARCHAR(250); DECLARE presult VARCHAR(4000) DEFAULT ''; DECLARE done INT DEFAULT FALSE; DECLARE cur CURSOR FOR SELECT tf_attachmentId , tf_name ,tf_filename FROM _Attachment WHERE tf_moduleId = moduleid AND tf_moduleidvalue = keyid; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; SET presult = '<ol class=\'gridcelltooltip\'>'; OPEN cur; read_loop : LOOP FETCH cur INTO pid , ptitle , pfilename; IF done THEN LEAVE read_loop; END IF; IF pfilename is null THEN SET presult = concat( presult ,'<li>', ptitle ,'</li>'); ELSE SET presult = concat( presult ,'<li>', ptitle , '(', pfilename, ')</li>'); END IF; END LOOP; SET presult = concat(presult ,'</ol>'); CLOSE cur; RETURN presult; END
/** * 具有附件的模块的显示附件个数的grid字段,可以显示附件的个数和tooltip,单击可以直接进入到此记录的附件列表及显示 * */ Ext.define('app.module.widget.column.AttachmentNumberColumn', { extend : 'Ext.grid.column.Column', alias : 'widget.attachmentnumbercolumn', dataIndex : 'tf_attachmentCount', text : '<span class="fa fa-paperclip"></span>', tooltip : '附件数', align : 'center', menuDisabled : true, sortable : true, resizable : false, locked : true, width : 36, renderer : function(val, metaData, model, row, col, store, gridview) { if (val) { metaData.tdAttr = 'data-qtip="' + model.get('tf_attachmentTooltip') + '"'; var result = '<span class="attachmentColumnNumber">' + (val > 9 ? val : '0' + val) + '</span>'; return result; } }, processEvent : function(type, view, cell, recordIndex, cellIndex, e, record, row) { if (type === 'click') { // 如果鼠标是在附件个数上面点击的 if (e.getTarget().className === 'attachmentColumnNumber') { // 打开浏览和管理附件的页面 app.mainRegion.addParentFilterModule('_Attachment', record.module.tf_moduleName, record.get(record.idProperty), record.getTitleTpl(), { showAdditionView : true }); } } } })
常规功能和模块自定义系统 (cfcmms)—021自定义grid列(5附件列)
原文:http://blog.csdn.net/jfok/article/details/50189073