报表(双击普通单元格、单击超链接单元格),整理了一下

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

报表(双击普通单元格、单击超链接单元格),整理了一下

示例代码://******************************************************

using System;using System.Collections.Generic;using System.Linq;

using System.Text;using System.Data;

using System.ComponentModel;using Kingdee.BOS;

using Kingdee.BOS.Util;

using Kingdee.BOS.Core;

using Kingdee.BOS.Core.DynamicForm.PlugIn;

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using Kingdee.BOS.Core.Report;

using Kingdee.BOS.Core.Report.PlugIn;

using Kingdee.BOS.Core.Report.PlugIn.Args;

using Kingdee.BOS.Core.Bill;

using Kingdee.BOS.Core.DynamicForm;

using Kingdee.BOS.Core.Metadata;

using Kingdee.BOS.Core.SqlBuilder;

using Kingdee.BOS.ServiceHelper;

namespace JDSample.FormPlugIn.Report{    

[Description("用户点击报表单元格式时,打开指定单据")]    

public class S160615ShowLinkBillRptPlug : AbstractSysReportPlugIn    {        

///         /// 表格行双击事件:简单账表,不会触发此事件        ///         ///         

public override void EntityRowDoubleClick(EntityRowClickEventArgs e)        {            base.EntityRowDoubleClick(e);        }       

///         /// 方案一,用户双击单元格:读取焦点单元格记录的单据编号,打开对应单据        ///         ///         ///         /// 单元格不需要显示为超链接格式;        ///         

public override void CellDbClick(CellEventArgs Args)        {            

// 略过系统的标准联查单据处理            

Args.Cancel = true;            

int rowSeq = Args.CellRowIndex;     // 行序号,以1开始           

 string fldKey = Args.Header.FieldName;            // 根据当前所选的单据编号字段名,确定需要打开的单据类型           

 // 示例代码,以打开采购订单为例            

string formId = string.Empty;            

if (fldKey.EqualsIgnoreCase("FBillNo"))            {                

// 以打开采购订单为例                

formId = "PUR_PurchaseOrder";            }            

if (string.IsNullOrWhiteSpace(formId))            {                

// 双击的是普通单元格,不需要显示单据                

return;            }            

string billNo = this.GetBillNo(fldKey, rowSeq - 1);            

if (string.IsNullOrWhiteSpace(billNo))            {                

// 单元格无内容,不确定需要打开那张单据                

return;            }            

// 根据单据编号,加载单据内码            

string pkValue = this.LoadPKValue(formId, billNo);            

// 显示指定单据            

this.ShowForm(formId, pkValue);        }        

///         /// 方案二,用户点击带链接的单元格:读取此单元格记录的单据编号,打开对应单据        ///         ///         public override void EntryButtonCellClick(EntryButtonCellClickEventArgs e)        {            

int rowSeq = e.Row;     // 行序号,以1开始            

string fldKey = e.FieldKey;            // 根据当前所选的单据编号字段名,确定需要打开的单据类型            

// 示例代码,以打开采购订单为例            

string formId = string.Empty;            

if (fldKey.EqualsIgnoreCase("FBillNo"))            {               

 // 以打开采购订单为例                

formId = "PUR_PurchaseOrder";            }            

if (string.IsNullOrWhiteSpace(formId))            {                

// 双击的是普通单元格,不需要显示单据                

return;            }            

string billNo = this.GetBillNo(fldKey, rowSeq - 1);            

if (string.IsNullOrWhiteSpace(billNo))            {                

// 单元格无内容,不确定需要打开那张单据                

return;            }            

// 根据单据编号,加载单据内码            

string pkValue = this.LoadPKValue(formId, billNo);            

// 显示指定单据            

this.ShowForm(formId, pkValue);        }        

///         /// 获取指定行指定列对应的单据编号值        ///         /// 焦点单元格列名        /// 焦点行号        ///         

private string GetBillNo(string fldKey, int rowIndex)        {            

// 方案一:使用行索引,到报表数据源中自行获取行            // 报表显示的数据源            

DataTable dt = ((ISysReportModel)this.View.Model).DataSource;            

if (dt.Rows.Count == 0 || rowIndex >= dt.Rows.Count)            {                

return string.Empty;            }            

DataRow currRow = dt.Rows[rowIndex];            

string billNo = Convert.ToString(currRow[fldKey]);           

 // 方案二:获取报表当前选择的数据行            

DataRow[] rows = ((ISysReportView)this.View).SelectedDataRows;           

 //billNo = Convert.ToString(rows[0][fldKey]);            

return billNo;        }        

///         /// 根据单据编号,读取单据内码        ///         ///         ///         ///         

private string LoadPKValue(string formId, string billNo)        {            

FormMetadata meta = MetaDataServiceHelper.Load(this.Context, formId) as FormMetadata;            // 构建取数参数            

QueryBuilderParemeter queryParam = new QueryBuilderParemeter();            // 指定单据FormId及其元数据            queryParam.FormId = formId;            

queryParam.BusinessInfo = meta.BusinessInfo;            // 指定需要加载的字段:使用单据设计时的字段标识(Key)            // 单据主键            

queryParam.SelectItems.Add(new SelectorItemInfo(meta.BusinessInfo.GetForm().PkFieldName));            

// 取单据编号字段            

var fldBillNo = meta.BusinessInfo.GetBillNoField();            // 构造过滤条件:根据单据编号取数, 单据编号值以SQL参数的形式传入            

queryParam.FilterClauseWihtKey = string.Format(" {0} = @FBillNo ", fldBillNo.Key);            

SqlParam billNoParam = new SqlParam("@FBillNo", KDDbType.String, billNo);            queryParam.SqlParams.Add(billNoParam);            

// 读取数据            

var rows = QueryServiceHelper.GetDynamicObjectCollection(this.Context, queryParam);            

string pkValue = string.Empty;            

if (rows != null && rows.Count > 0)            {                

pkValue = Convert.ToString(rows[0][0]);            

}            

return pkValue;        

}        

///         /// 打开单据界面,显示指定的单据        ///         ///         ///         

private void ShowForm(string formId, string pkValue)        {            

// using Kingdee.BOS.Core.Bill;            

string pageId = Guid.NewGuid().ToString();            

BillShowParameter showParameter = new BillShowParameter();            

showParameter.FormId = formId;            

showParameter.OpenStyle.ShowType = ShowType.Floating;            

showParameter.PageId = pageId;            

showParameter.Status = OperationStatus.EDIT;            

showParameter.PKey = pkValue;            

this.View.ShowForm(showParameter);        

}    

}}


报表(双击普通单元格、单击超链接单元格),整理了一下

示例代码://******************************************************using System;using System.Collections.Generic;using System.Li...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息