【042】UI界面的一些通用代码
侧边栏壁纸
  • 累计撰写 60 篇文章
  • 累计收到 2 条评论

【042】UI界面的一些通用代码

秋驰雪隙
2025-04-08 / 0 评论 / 10 阅读 / 正在检测是否收录...

设置状态按钮的水印

参考:【003】U9状态按钮水印效果

列表跳转

private void BtnList_Click_Extend(object sender, EventArgs e)
{
    this.Action.CurrentPart.NavigatePage("列表的URL", null);
}

开启个性化

public void AfterCreateChildControls()
{
    UFIDA.U9.UI.PDHelper.PersonalizationHelper.SetPersonalizationEnable(this, true);
}

查找代码

private void BtnFind_Click_Extend(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(wpFindID.Value)) 
        this.Action.NavigateAction.MovePageAt(null, long.Parse(wpFindID.Value));
}

public void AfterCreateChildControls()
{
    PDFormMessage.ShowConfirmDialog(this.Page, "d6553293-1bfa-4443-9920-630fba59a428", Title, wpFindID.ClientID, this.BtnFind);
}

移除选中行

private void RemoveSelectLine()
{
    var selectRecords = this.Model.MainView.SelectRecords;
    if (selectRecords?.Count > 0)
    {
        foreach (var item in selectRecords)
        {
            if (item.PrimaryKey > 0)
                item.DataRecordState = DataRowState.Deleted;
            else
                this.Model.MainView.Records.Remove(item);
        }
    }
}

公共方法

public class CommonVoid
{
    /// <summary>
    /// 获取值集ID
    /// </summary>
    /// <param name="code">值集编码</param>
    /// <returns></returns>
    public static long GetValueSetDefID(string code)
    {
        string sql = $"select ID,Code from Base_ValueSetDef where Code='{code}'";
        DataAccessor.RunSQL(DataAccessor.GetConn(), sql, null, out object obj);
        if (obj == null) return -1;
        long.TryParse(obj.ToString(), out long valueSetDef);
        return valueSetDef;
    }
    
    public static decimal ConvertToDecimal(object o)
    {
        decimal v;
        decimal.TryParse(o?.ToString(), out v);
        return v;
    }

    public static long ConvertToInt64(object o)
    {
        long v;
        long.TryParse(o?.ToString(), out v);
        return v;
    }

    public static int ConvertToInt32(object o)
    {
        int v;
        int.TryParse(o?.ToString(), out v);
        return v;
    }

    public static DateTime? ConvertToDateTime(object o)
    {
        if (o == null) return null;
        DateTime v;
        if (DateTime.TryParse(o?.ToString(), out v) == false) return null;
        return v;
    }

    public static string ConvertToString(object o)
    {
        return o?.ToString();
    }

    /// <summary>
    /// 按钮启用/禁用
    /// </summary>
    /// <param name="enabled">true 启用,false 禁用</param>
    /// <param name="btns"></param>
    public static void UFButtonEnabled(bool enabled, params IUFButton[] btns)
    {
        foreach (var btn in btns)
        {
            btn.Enabled = enabled;
        }
    }

    /// <summary>
    /// 控件只读/可编辑
    /// </summary>
    /// <param name="readOnly">true 只读,fasel 可编辑</param>
    /// <param name="controls"></param>
    public static void ControlReadOnly(bool readOnly, params IUFControl[] controls)
    {
        foreach (IUFControl control in controls)
        {
            (control as IUIFieldBindingDataBindControl).ReadOnly = readOnly;
        }
    }

    public static void ShowAlertMessage(IPart part, string theMessage)
    {
        BaseWebForm webPart = part as BaseWebForm;
        if (webPart == null) return;

        string alertScript = GetAlertScript(theMessage);
        AtlasHelper.RegisterAtlasStartupScript(webPart.Page, webPart.Page.GetType(), Guid.NewGuid().ToString(), alertScript, false);
    }

    private static string GetAlertScript(string theMessage)
    {
        theMessage = ReplaceLawlessCharForShowAlertScript(theMessage);
        return ("<script language=\"javascript\">\n alert('" + theMessage + "'); </script>\n");
    }
    private static string ReplaceLawlessCharForShowAlertScript(string message)
    {
        message = message.Replace(@"\r", "\r");
        message = message.Replace(@"\n", "\n");
        message = message.Replace("\r", @"\r");
        message = message.Replace("\n", @"\n");
        return message;
    }

    public static void ShowConfirmMessage(IPart part, string theMessage)
    {
        BaseWebForm webPart = part as BaseWebForm;
        if (webPart == null) return;

        string ConfirmScript = GetConfirmScript(theMessage);
        AtlasHelper.RegisterAtlasStartupScript(webPart.Page, webPart.Page.GetType(), Guid.NewGuid().ToString(), ConfirmScript, false);
    }

    private static string GetConfirmScript(string theMessage)
    {
        theMessage = ReplaceLawlessCharForShowAlertScript(theMessage);
        return ("<script language=\"javascript\">\n Confirm('" + theMessage + "'); </script>\n");
    }


    /// <summary>
    /// 设置控件在卡片容器中的布局
    /// </summary>
    /// <param name="container">卡片容器</param>
    /// <param name="ctrl">增加的控件</param>
    /// <param name="x">布局横坐标</param>
    /// <param name="y">布局纵坐标</param>
    public static void Layout(UFSoft.UBF.UI.ControlModel.IContainer container, IUFControl ctrl, uint x, uint y)
    {
        Layout(container, ctrl, x, y, 1, 1, Unit.Pixel(0), Unit.Pixel(0), true);
    }

    /// <summary>
    /// 设置控件在卡片容器中的布局
    /// </summary>
    /// <param name="container">卡片容器</param>
    /// <param name="ctrl">增加的控件</param>
    /// <param name="x">布局横坐标</param>
    /// <param name="y">布局纵坐标</param>
    /// <param name="width">控件宽</param>
    /// <param name="height">控件高</param>
    public static void Layout(UFSoft.UBF.UI.ControlModel.IContainer container, IUFControl ctrl, uint x, uint y, int width, int height)
    {
        Layout(container, ctrl, x, y, 1, 1, Unit.Pixel(width), Unit.Pixel(height), false);
    }


    /// <summary>
    /// 设置控件在卡片容器中的布局
    /// </summary>
    /// <param name="container">卡片容器</param>
    /// <param name="ctrl">增加的控件</param>
    /// <param name="x">布局横坐标</param>
    /// <param name="y">布局纵坐标</param>
    /// <param name="xspan">单元格横向跨度</param>
    /// <param name="yspan">单元格纵向跨度</param>
    /// <param name="width">控件宽</param>
    /// <param name="height">控件高</param>
    /// <param name="isAutoSize">是否自适应大小</param>
    public static void Layout(UFSoft.UBF.UI.ControlModel.IContainer container, IUFControl ctrl, uint x, uint y, int xspan, int yspan,
        Unit width, Unit height, bool isAutoSize)
    {
        IGridLayout gl = container.Layout as IGridLayout;
        if (gl == null) return;

        GridLayoutInfo glInfo = new GridLayoutInfo(x, y, (uint)xspan, (uint)yspan, width, height);
        glInfo.AutoSize = isAutoSize;
        gl.Controls.Add((Control)ctrl, glInfo);

    }

    /// <summary>
    /// 在父容器中查找控件
    /// </summary>
    /// <param name="parentControl">父容器</param>
    /// <param name="control">控件</param>
    /// <returns>找到的控件</returns>
    public static IUFControl FindControl(IPart part, string parentControl, string control)
    {
        IUFCard card = (IUFCard)part.GetUFControlByName(part.TopLevelContainer, parentControl);
        if (card == null)
            return null;

        foreach (IUFControl ctrl in card.Controls)
        {
            if (ctrl.ID.Equals(control, StringComparison.OrdinalIgnoreCase))
            {
                return ctrl;
            }
        }
        return null;
    }

    /// <summary>
    /// 生成控件回调按钮
    /// </summary>
    /// <param name="card">按钮所在的Card</param>
    /// <param name="id">按钮ID</param>
    /// <param name="clickEvent">按钮回调事件</param>
    public static void LayoutCallBack(IUFCard card, string id, Action<object, EventArgs> clickEvent)
    {
        IUFButton callback = new UFWebButtonAdapter { ID = id, Visible = false, Text = "" };
        card.Controls.Add(callback);
        Layout(card, callback, 0, 0);
        callback.Click += new EventHandler(clickEvent);
    }

    /// <summary>
    /// 查找回调控件按钮
    /// </summary>
    /// <param name="card">按钮所在的Card</param>
    /// <param name="id">按钮ID</param>
    /// <returns></returns>
    public static IUFButton GetCallBackBtn(IUFCard card, string id)
    {
        var ctrls = card.Controls as UFControlCollection;
        // 从后往前找,因为Controls.Add会添加到最后面
        for (int i = ctrls.Count - 1; i >= 0; i--)
        {
            if (ctrls[i].ID == id) return ctrls[i] as IUFButton;
        }
        return null;
    }

}

打开弹窗

private void BtnXXX_Click_Extend(object sender, EventArgs e)
{
    // 直接打开弹窗
    this.ShowModalDialog("ac3322bd-b74e-409a-a687-a0d5697dd214", "窗体标题", "610", "130", null, null, true);
        
    // 弹窗窗体并在关闭弹窗时进入回调
    IUFButton btnCall = CommonVoid.GetCallBackBtn(Card0, "BtnCallBack");
    this.ShowAtlasModalDialog(btnCall, "ac3322bd-b74e-409a-a687-a0d5697dd214", "窗体标题", "472", "160", "", null, true, false, false);
}

public void AfterCreateChildControls()
{
    // 创建回调弹窗
    CommonVoid.LayoutCallBack(Card0, "BtnCallBack", BtnCallBack);      
}

// 弹窗回调函数
private void PullOrderWindowCallBack(object sender, EventArgs e)
{
    // 处理弹窗返回的数据
    if (this.CurrentSessionState["XXX"] != null && base.CurrentSessionState["XXX"] is XXXXXX)
    {
        XXXXXX res = (XXXXXX)base.CurrentSessionState["XXX"];
        
        // 处理res的代码......
        
        this.CurrentSessionState["XXX"] = null;
    }
    
    // 清除一些关闭弹窗就要清空的CurrentSessionState,右上角关闭按钮也会触发回调
    this.CurrentSessionState["XXXData1"] = null;
    this.CurrentSessionState["XXXData2"] = null;
}

初始化列表的行号

 private void AfterCreateChildControls()
{
    // 设置默认行号
    GetProfileValueProxy bpObj = new GetProfileValueProxy();
    bpObj.ProfileCode = "SysLineNo";
    PVDTOData pVDTOData = bpObj.Do();
    //行GRID
    IAutoRowNo rowNo = this.DataGrid6.Columns["DocLineNo"] as IAutoRowNo;
    if (rowNo != null)
    {
        rowNo.Sequence = true;
        rowNo.SequenceStep = Convert.ToInt32(pVDTOData.ProfileValue);
        rowNo.SequenceStart = Convert.ToInt32(pVDTOData.ProfileValue);
    }
}

个性化提示

private void AfterCreateChildControls()
{
    PDFormMessage.ShowDelConfirmDialog(this.Page, PDResource.DeleteConfirmInfo, Title, this.BtnDelete);
    //PDFormMessage.ShowConfirmDialog(this.Page, "是否审核!", "审核提示", this.BtnApprove);
    PDFormMessage.ShowConfirmDialog(this.Page, "是否弃审!", "弃审提示", this.BtnUndoApprove);
}

注册扩展字段

private void AfterCreateChildControls()
{
    //扩展字段 --单头实体扩展字段
    FlexFieldHelper.SetDescFlexField(this.FlexFieldPicker0, this.Model.MainView);
    //扩展字段 --单行实体扩展字段
    FlexFieldHelper.SetDescFlexField(this.DataGrid6, this.DataGrid6.Columns.Count - 1);
}

CallBack事件注册

参考:【028】CallBack事件注册

PostBack事件注册

参考:【029】PostBack事件注册

0

评论 (0)

取消