# 报表表单插件 — C#（AbstractSysReportPlugIn）

```csharp
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Report.PlugIn;
using Kingdee.BOS.Core.Report.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;

namespace Kingdee.MyProject.Report
{
    [Description("报表表单插件"), HotUpdate]
    public class MyReportFormPlugin : AbstractSysReportPlugIn
    {
        public override void OnInitialize(EventArgs e)
        {
            base.OnInitialize(e);
            // 读取打开参数
            // var param = this.View.OpenParameter.GetCustomParameter("参数标识");
        }

        public override void PrepareFilterParameter(FilterArgs e)
        {
            base.PrepareFilterParameter(e);
            DynamicObject filter = e.CustomFilter;
            if (filter != null)
            {
                // 从过滤框取值
                DynamicObject org = filter["F_OrgId"] as DynamicObject;
                if (org != null)
                {
                    this.View.Model.SetValue("F_OrgNumber", Convert.ToString(org["Number"]));
                }

                string name = Convert.ToString(filter["F_MaterialName"]);
                this.View.Model.SetValue("F_MaterialName", string.IsNullOrEmpty(name) ? "全部" : name);
            }
        }

        public override void AfterBindData(EventArgs e)
        {
            base.AfterBindData(e);
            var grid = this.View.GetControl("FList");
            grid.SetCustomPropertyValue("AllowSorting", false);
        }

        public override void OnFormatRowConditions(ReportFormatConditionArgs args)
        {
            base.OnFormatRowConditions(args);
            // 设置颜色
            if (args.DataRow["FSafeStockWarning"] != null &&
                Convert.ToDecimal(args.DataRow["FSafeStockWarning"]) < 0)
            {
                FormatCondition fc = new FormatCondition
                {
                    BackColor = "#FC957F",
                    Key = "FSafeStockWarning"
                };
                args.FormatConditions.Add(fc);
            }
        }

        public override void ButtonClick(ButtonClickEventArgs e)
        {
            base.ButtonClick(e);
            if (e.Key.EqualsIgnoreCase("F_BTN_Refresh"))
            {
                // 清空条件刷新
                this.View.Refresh();
            }
        }

        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            if (e.BarItemKey.EqualsIgnoreCase("F_BTN_MyBtn"))
            {
                int rowCount = this.Model.GetRowCount();
                this.View.ShowMessage("共" + rowCount + "行");
            }
        }
    }
}
```

**AbstractSysReportPlugIn 专有事件（反编译 Kingdee.BOS.Core.dll）：**
ReportInitialize / CellFormat / **CellClick** / **CellDbClick** / BeforeButtonClick / AfterButtonClick / AfterGetData / **FormatCellValue** / **OnFormatRowConditions** / **PrepareFilterParameter** / CreateFilterEditorControl / AfterGetAllPageDataSet / BeforeBuildExcelSheet / AfterBuildExportReportTitle

此外继承 AbstractDynamicFormPlugIn 全部事件（OnInitialize / OnLoad / AfterBindData / ButtonClick / BarItemClick / EntryButtonCellClick / EntityRowClick 等，见 FormPlugin.md）。

**源码参考：** `博瑞报表/` — SaleReportFormPlugin.cs, DefectReasonAnalysisFormPlugin.cs, PurchasePaymentFormPlugin.cs
