博客园  :: 首页  :: 联系 :: 管理

ASPxScheduler 自定义 InplaceEditor

Posted on 2010-01-19 11:22  sunrack  阅读(712)  评论(0编辑  收藏  举报

如果没有自定义的字段,只是布局改变,则比较简单

 

1.复制 InplaceEditor.ascx 重命名为 InplaceEditorTimeTracking.ascx

 

2、修改 InplaceEditorTimeTracking.ascx 的布局,可以添加控件

<dxrp:ASPxRoundPanel ID="ASPxRoundPanelTitle" runat="server" Width="100%" SkinID="PlasticBlue"
    HeaderText="Hour used">
    <PanelCollection>
        <dxp:PanelContent runat="server">
            <table border="0" cellpadding="0" cellspacing="0" width="100%">
                <tr>
                    <td >
                        <dxe:ASPxTextBox ID="Subject" runat="server" Width="100%" Text='<%# ((AppointmentInplaceEditorTemplateContainer)Container.Parent.Parent).Appointment.Subject %>'>
                        </dxe:ASPxTextBox>
                    </td>
          
                    <td width="25">
                        <cc1:NoBorderButton runat="server" ClientInstanceName="_dx" ID="btnSave" Width="19px"
                            Height="19px" ToolTip="Save" ImageUrl='<%#Page.ClientScript.GetWebResourceUrl(typeof(ASPxScheduler), "Images.InplaceEditor.Save.png") %>'
                            Image-IsResourcePng="True">
                            <Image Height="19px" Width="19px" />
                        </cc1:NoBorderButton>
                    </td>
                    <td width="25">
                        <cc1:NoBorderButton runat="server" ClientInstanceName="_dx" ID="btnCancel" Width="19px"
                            Height="19px" ToolTip="Cancel" ImageUrl='<%#Page.ClientScript.GetWebResourceUrl(typeof(ASPxScheduler), "Images.InplaceEditor.Cancel.png") %>'
                            CausesValidation="False" Image-IsResourcePng="True">
                            <Image Height="19px" Width="19px" />
                        </cc1:NoBorderButton>
                    </td>
                </tr>
            </table>
        </dxp:PanelContent>
    </PanelCollection>
</dxrp:ASPxRoundPanel>

 

 

3、修改后台代码 InplaceEditorTimeTracking.ascx.cs

 

namespace Diebold.ProjectTracking.Web.Controls.ASPxSchedulerForms
{
    public partial class InplaceEditorTimeTracking : InplaceEditorBaseFormControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //PrepareChildControls();
            Subject.Focus();
        }
        public override void DataBind()
        {
            base.DataBind();
            AppointmentInplaceEditorTemplateContainer container = (AppointmentInplaceEditorTemplateContainer)Parent;
 
            btnSave.ClientSideEvents.Click = container.SaveHandler;
            btnCancel.ClientSideEvents.Click = container.CancelHandler;
        }
        protected override ASPxEditBase[] GetChildEditors()
        {
            ASPxEditBase[] edits = new ASPxEditBase[] { Subject };
            return edits;
        }
        protected override ASPxButton[] GetChildButtons()
        {
            ASPxButton[] buttons = new ASPxButton[] {
            btnSave, btnCancel
        };
            return buttons;
        }
    }
}

 

4、新建类 InplaceEditorSaveCallbackCommandTimeTracking.cs
namespace Diebold.ProjectTracking.Web.Controls.ASPxSchedulerForms
{
    public class InplaceEditorSaveCallbackCommandTimeTracking : AppointmentInplaceEditorSaveCallbackCommand
    {
        public InplaceEditorSaveCallbackCommandTimeTracking(ASPxScheduler control)
            : base(control)
        {
        }
 
        protected override void AssignControllerValues()
        {
            ASPxRoundPanel panel = (ASPxRoundPanel)FindControlByID("ASPxRoundPanelTitle");
 
            Controller.Subject = ((ASPxTextBox)panel.FindControl("Subject")).Text;
 
            base.AssignControllerValues();        
        }
    }
}

 

 

5、为ASPxScheduler控件添加事件处理函数 OnBeforeExecuteCallbackCommand

 

<dxwschs:ASPxScheduler ID="ASPxSchedulerActivity" runat="server" Width="100%" SkinID=""
        ActiveViewType="Week" ClientInstanceName="ASPxSchedulerActivityClient" GroupType="Date"
        OnBeforeExecuteCallbackCommand="ASPxSchedulerActivity_OnBeforeExecuteCallbackCommand"

 

protected void ASPxSchedulerActivity_OnBeforeExecuteCallbackCommand(object sender, SchedulerCallbackCommandEventArgs e)
{
    if (e.CommandId == SchedulerCallbackCommandId.InplaceEditorSave)
    {
        e.Command = new InplaceEditorSaveCallbackCommandTimeTracking((ASPxScheduler)sender);
    }
}