在SplendidCRM中添加用户控件

1.在_controls目录下新建一个web user control,名为PriceRange.ascx, 用于搜索某一个价格范围内的记录。

<%@ Control Language="C#" AutoEventWireup="" CodeBehind="PriceRange.ascx.cs" Inherits="SplendidCRM._controls.PriceRange" %>

<asp:Table ID="Table1" BorderWidth="0" CellPadding="0" CellSpacing="0" runat="server">
    <asp:TableRow>
        <asp:TableCell>
        <table id="tblPriceRange" runat="server">            
        <tr>
        <td>Greater_than</td>
        <td><asp:TextBox ID="From_Price" runat="server"></asp:TextBox></td>
        </tr>        
         <tr>
        <td>Less_than</td>
        <td><asp:TextBox ID="To_Price" runat="server"></asp:TextBox></td>
        </tr>        
        </table>            
        </asp:TableCell>
    </asp:TableRow>
</asp:Table>

注意:设置AutoEventWireup="False" ,和其他页面保持一致,在cs中用#region Web Form Designer generated code代码段调用页事件

关于AutoEventWireup="False" 的详解http://www.cnblogs.com/qiantuwuliang/archive/2009/07/04/1517013.html

http://msdn.microsoft.com/zh-cn/library/system.web.configuration.pagessection.autoeventwireup.aspx

 

设计样式如下图:
 

 

2. PriceRange.ascx.cs的全部代码内容:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SplendidCRM._controls
{
    public partial class PriceRange : SplendidControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        private bool bUIRequired;
        public bool UIRequired
        {
            get { return bUIRequired; }
            set { bUIRequired = value; }
        }

        public Unit Width //初始宽度100,接受设定值
        {
            get { return From_Price.Width;}
            set
            {
                if (value.Value <= 0)
                {
                    From_Price.Width = 100;
                    To_Price.Width = 100;
                }
                else
                {
                    From_Price.Width = value;
                    To_Price.Width = value;
                }
            }
        }
        public short TabIndex
        {
            get { return From_Price.TabIndex;}
            set 
            {
            From_Price.TabIndex = value;
            To_Price.TabIndex = value; 
            }
        }

        public string FromPrice
        {
            get { return From_Price.Text; }
            set { To_Price.Text = value; }
        }

        public string ToPrice
        {
            get { return To_Price.Text; }
            set { To_Price.Text = value; }
        }

        public string FromPriceID
        {
            get { return From_Price.ID; }
            set { To_Price.ID = value; }
        }

        public string ToPriceID
        {
            get { return To_Price.ID; }
            set { To_Price.ID = value; }
        }


        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        ///        Required method for Designer support - do not modify
        ///        the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion
    }
}

 

3. 在 SplendidCRM.Administration.DynamicLayout.EditViews.NewRecord.ascx页面代码的

<asp:DropDownList ID="lstFIELD_TYPE" OnSelectedIndexChanged="lstFIELD_TYPE_Changed" AutoPostBack="true" Runat="server">

中添加一个ListItem:

<asp:ListItem Value="PriceRange"    >PriceRange</asp:ListItem>

image

然后在在 SplendidCRM.Administration.DynamicLayout.EditViews.NewRecord.ascx.cs的

protected override void lstFIELD_TYPE_Changed(Object sender, EventArgs e)

方法中添加一个case语句:

case "PriceRange":      spnDATA.Visible = true; spnDATA_LABEL.Visible = true; spnREQUIRED.Visible = true; spnCHANGE.Visible = false; spnTEXT1.Visible = false; spnTEXT2.Visible = true; spnTEXT3.Visible = false; spnFORMAT_ROWS.Visible = false; spnLIST_NAME.Visible = false; spnGENERAL.Visible = true; break;

 

image

 

此时在管理页面中的FiledType下拉列表中已经可以看到PriceRange控件,但它现在还不能用,还需要做后续的工作才能让它正常工作起来。

image

 

4. 在_Code/SplendidDynamic.cs的

public static void AppendEditViewFields(DataView dvFields, HtmlTable tbl, IDataReader rdr, L10N L10n, TimeZone T10n, CommandEventHandler Page_Command, bool bLayoutMode)

方法中的if ~else if的sFIELD_TYPE的判断区域添加以下代码:

 

                else if (String.Compare(sFIELD_TYPE, "PriceRange", true) == 0)
                {
                    PriceRange ctlInput = tbl.Page.LoadControl("~/_controls/PriceRange.ascx") as PriceRange;
                    ctlInput.Width = nFORMAT_SIZE;
                    ctlInput.ID = sDATA_FIELD;
                    ctlInput.TabIndex = nFORMAT_TAB_INDEX;
                    ctlInput.UIRequired = bUI_REQUIRED;
                    tdField.Controls.Add(ctlInput);
                    try
                    {
                        if (rdr !=null)
                        {
                            ctlInput.FromPrice = Sql.ToString(rdr[sDATA_FIELD]);
                            ctlInput.ToPrice = Sql.ToString(rdr[sDATA_FIELD]);
                        }
                    }
                    catch (Exception ex)
                    {
                        SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex);
                    }
                    if (bLayoutMode)
                    {
                        Literal litField = new Literal();
                        litField.Text = sDATA_FIELD;
                        tdField.Controls.Add(litField);

                    }
                }

 

6. 现在重新登录系统,reload一次,进入admin中的layout manager,在Select Edit View中选择Books.SearchBasic视图,然后将刚才制作的PriceRange用户控件添加到此视图的页面中。

image

现在回到Book模块default页面,就能看到搜索栏中多了名为Book_Price:的PriceRange用户控件了,但是它还只是个摆设,当你点击search button时并不会按照你的价格范围进行搜索,因为我还没有在SearchView用户控件中给它编写SQL方法。OK,下面继续…

image

 

7. 继续劳动^_* ,打开_Control/SearchView.ascx.cs文件,在 public virtual void SqlSearchClause(IDbCommand cmd) 方法中参照类似的DateRange用户控件的代码段写入以下代码:

                        else if (sFIELD_TYPE == "PriceRange")
                        {
                            PriceRange ctlPrice = FindControl(sDATA_FIELD) as PriceRange;
                           //PriceRange ctlToPrice = FindControl("To_Price") as PriceRange;
 
                            float fromPrice = 0;
                            float toPrice = 0;
                            if (ctlPrice != null)
                            {
                                if (!Sql.IsEmptyString(ctlPrice.FromPrice))
                                {
                                    fromPrice =Sql.ToFloat(ctlPrice.FromPrice);
                                }
                                if (!Sql.IsEmptyString(ctlPrice.ToPrice))
                                {
                                    toPrice = Sql.ToFloat(ctlPrice.ToPrice);
                                }
                            }
                            if (fromPrice != 0 || toPrice != 0)
                                Sql.AppendParameter(cmd, fromPrice, toPrice, sDATA_FIELD);
                            //需要在sql.cs中构建方法签名与此调用相符的AppendParameter方法
                        }

 

8.在_code/sql.cs中构建一个签名为public static void AppendParameter(IDbCommand cmd, float fValue1, float fValue2, string sField) 的方法:

        public static void AppendParameter(IDbCommand cmd, float fValue1, float fValue2, string sField)
        {
            if (fValue1 != 0)
            {
                cmd.CommandText += "   and " + sField + " >= @" + sField +"_From" + ControlChars.CrLf;
                //cmd.Parameters.Add("@" + sField, DbType.DateTime, 8).Value = dtValue;
                Sql.AddParameter(cmd, "@" + sField + "_From", fValue1);
            }
            if (fValue2 != 0)
            {
                cmd.CommandText += "   and " + sField + " <= @" + sField + "_To" + ControlChars.CrLf;
                //cmd.Parameters.Add("@" + sField, DbType.DateTime, 8).Value = dtValue;
                Sql.AddParameter(cmd, "@" + sField + "_To", fValue2);
            }
        }

 

编译一下,去Books页面的搜索栏试试吧,哈哈,按照价格范围搜索成功了!

转载于:https://www.cnblogs.com/seapub/archive/2012/02/28/2372050.html

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值