using System; using System.Drawing; using System.Text; using System.Web; using FastReport.Dialog; using System.Windows.Forms; namespace FastReport.Web { public partial class WebReport { private void ProcessDialogs(StringBuilder sb, HttpContext context) { if (Prop.Dialogs) { Report report = this.Report; while (Prop.CurrentForm < report.Pages.Count && !(report.Pages[Prop.CurrentForm] is DialogPage && report.Pages[Prop.CurrentForm].Visible == true)) Prop.CurrentForm++; if (Prop.CurrentForm < report.Pages.Count) { Prop.State = ReportState.Forms; DialogPage dialog = report.Pages[Prop.CurrentForm] as DialogPage; if (!dialog.ActiveInWeb) { dialog.ActiveInWeb = true; dialog.OnLoad(EventArgs.Empty); dialog.OnShown(EventArgs.Empty); } GetDialogHtml(sb, dialog, context); } else Prop.State = ReportState.Report; } else Prop.State = ReportState.Report; } internal void SetUpDialogs(HttpContext context) { string dialogN = context.Request.Params["dialog"]; string controlName = context.Request.Params["control"]; string eventName = context.Request.Params["event"]; string data = context.Request.Params["data"]; if (!string.IsNullOrEmpty(dialogN)) { int dialogIndex = Convert.ToInt16(dialogN); if (dialogIndex >= 0 && dialogIndex < Report.Pages.Count) { DialogPage dialog = Report.Pages[dialogIndex] as DialogPage; DialogControl control = dialog.FindObject(controlName) as DialogControl; if (control != null) { if (eventName == "onchange") { if (!string.IsNullOrEmpty(data)) { if (control is TextBoxControl) TextBoxChange(control as TextBoxControl, data); else if (control is ComboBoxControl) ComboBoxChange(control as ComboBoxControl, Convert.ToInt16(data)); else if (control is ListBoxControl) ListBoxChange(control as ListBoxControl, Convert.ToInt16(data)); else if (control is CheckedListBoxControl) CheckedListBoxChange(control as CheckedListBoxControl, data); else if (control is DateTimePickerControl) DateTimePickerChange(control as DateTimePickerControl, data); else if (control is MonthCalendarControl) MonthCalendarChange(control as MonthCalendarControl, data); } } else if (eventName == "onclick") { if (control is ButtonControl) ButtonClick(control as ButtonControl); else if (control is CheckBoxControl) CheckBoxClick(control as CheckBoxControl, data); else if (control is RadioButtonControl) RadioButtonClick(control as RadioButtonControl, data); } } } } } private void ControlFilterRefresh(DataFilterBaseControl control) { control.FilterData(); if (control.DetailControl != null) { control.DetailControl.ResetFilter(); control.DetailControl.FillData(control); } } private string GetDialogID() { return String.Concat(Prop.ControlID, "Dialog"); } private void GetDialogHtml(StringBuilder sb, DialogPage dialog, HttpContext context) { string s = "
"; sb.AppendFormat(s, dialog.Width.ToString(), dialog.Height.ToString(), GetColor(dialog.BackColor)); sb.AppendFormat("
", GetDialogID(), dialog.Text); GetComponentHtml(sb, dialog.Controls); sb.Append("
"); } private void GetComponentHtml(StringBuilder sb, DialogComponentCollection collection) { foreach (DialogControl control in collection) { if (control.Visible) { // button if (control is ButtonControl) sb.Append(GetButtonHtml(control as ButtonControl)); // label else if (control is LabelControl) sb.Append(GetLabelHtml(control as LabelControl)); // textbox else if (control is TextBoxControl) sb.Append(GetTextBoxHtml(control as TextBoxControl)); // checkbox else if (control is CheckBoxControl) sb.Append(GetCheckBoxHtml(control as CheckBoxControl)); // radio button else if (control is RadioButtonControl) sb.Append(GetRadioButtonHtml(control as RadioButtonControl)); // combo box else if (control is ComboBoxControl) sb.Append(GetComboBoxHtml(control as ComboBoxControl)); // list box else if (control is ListBoxControl) sb.Append(GetListBoxHtml(control as ListBoxControl)); // checked list box else if (control is CheckedListBoxControl) sb.Append(GetCheckedListBoxHtml(control as CheckedListBoxControl)); // datetime else if (control is DateTimePickerControl) sb.Append(GetDateTimePickerHtml(control as DateTimePickerControl)); // monthcalendar else if (control is MonthCalendarControl) sb.Append(GetMonthCalendarHtml(control as MonthCalendarControl)); // GroupBox else if (control is GroupBoxControl) sb.Append(GetGroupBoxHtml(control as GroupBoxControl)); } } } private void GetDialogWindow(StringBuilder sb, DialogPage dialog, WebReport webReport) { sb.Append(""); } private string GetStandardStyle(DialogControl control) { return string.Format("{0} {1} {2}", GetControlPosition(control), GetControlFont(control.Font), GetColor(control.BackColor)); } protected string GetColor(Color color) { if (!color.IsEmpty) return string.Format("background-color: {0};", ColorTranslator.ToHtml(color)); return string.Empty; } private string GetEvent(string eventName, DialogControl control, string data) { return string.Format("{0}frRequestServer('{1}?object={2}&dialog={3}&control={4}&event={5}&data=' + {6}){7}", "setTimeout(function(){", Prop.HandlerURL, Prop.ControlID, Prop.CurrentForm.ToString(), control.Name, eventName, string.IsNullOrEmpty(data) ? "''" : string.Format("{0}", data), "},250)" ); } private string GetControlFont(Font font) { return string.Format("font-size:{0}pt;font-weight:normal;display:inline-block;", font.Size); } private string GetControlPosition(DialogControl control) { return string.Format("position:absolute;left:{0}px;top:{1}px;width:{2}px;height:{3}px;padding:0px;margin:0px;", control.Left, control.Top, control.Width, control.Height); } private string GetControlAlign(DialogControl control) { if (control is LabelControl) return GetAlign((control as LabelControl).TextAlign); else if (control is ButtonControl) return GetAlign((control as ButtonControl).TextAlign); else if (control is TextBoxControl) return GetEditAlign((control as TextBoxControl).TextAlign); else return ""; } private string GetEditAlign(HorizontalAlignment align) { if (align == HorizontalAlignment.Left) return "text-align:left;"; else if (align == HorizontalAlignment.Center) return "text-align:center;"; else if (align == HorizontalAlignment.Right) return "text-align:right;"; else return ""; } private string GetAlign(ContentAlignment align) { if (align == ContentAlignment.TopLeft) return "text-align:left;vertical-align:top;"; else if (align == ContentAlignment.TopCenter) return "text-align:center;vertical-align:top;"; else if (align == ContentAlignment.TopRight) return "text-align:right;vertical-align:top;"; else if (align == ContentAlignment.BottomLeft) return "text-align:left;vertical-align:bottom;"; else if (align == ContentAlignment.BottomCenter) return "text-align:center;vertical-align:bottom;"; else if (align == ContentAlignment.TopRight) return "text-align:right;vertical-align:bottom;"; else if (align == ContentAlignment.MiddleLeft) return "text-align:left;vertical-align:middle;"; else if (align == ContentAlignment.MiddleCenter) return "text-align:center;vertical-align:middle;"; else if (align == ContentAlignment.MiddleRight) return "text-align:right;vertical-align:middle;"; else return ""; } } }