Changing Text property of TextObject at runtime has unexpected results
I'm using the version of Crystal Reports that ships with VS 2008.
At runtime, I'm replacing the text of a TextObject with new text. This works fine when the TextObject contains only literal information, but when the TextObject contains a formula field it does not work as expected.
If I have the following in the designer:
Text1 with text of "Number: {@FormulaX}"
And in the runtime code (in the InitReport method):
Text1.Text = "N.: {@FormulaX}"
The observed output is: N.: {@ForumlaX}
Instead of the expected output of: N.: 5
I even tried the following in the runtime code:
string foo = Text1.Text;
Text1.Text = foo;
And it produced similar results.
Any ideas on what's going on, or how to get the results I'm expecting?
The Text property doesn't interpret the formula syntax. You'll need to use a RAS TextObject to accomplish this.
Note: This inproc RAS code will only work with Crystal Reports XI R2 SP2 and Crystal Reports 2008.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.ReportAppServer.ClientDoc;
using CrystalDecisions.ReportAppServer.DataDefModel;
public partial class _Default : System.Web.UI.Page
protected ReportDocument boReportDocument;
protected void Page_Load(object sender, EventArgs e)
if (!this.IsPostBack)
ConfigureCrystalReports();
CrystalReportViewer1.ReportSource = Session["Report"];
protected void ConfigureCrystalReports()
ISCDReportClientDocument boReportClientDocument;
CrystalDecisions.ReportAppServer.Controllers.ReportObjectController boReportObjectController;
CrystalDecisions.ReportAppServer.ReportDefModel.TextObject boOldTextObject, boNewTextObject;
CrystalDecisions.ReportAppServer.ReportDefModel.Paragraph boParagraph;
CrystalDecisions.ReportAppServer.ReportDefModel.ParagraphFieldElement boParagraphFieldElement;
CrystalDecisions.ReportAppServer.ReportDefModel.ParagraphTextElement boParagraphTextElement;
boReportDocument = new ReportDocument();
boReportDocument.Load(Server.MapPath("CrystalReport.rpt"));
boReportClientDocument = boReportDocument.ReportClientDocument;
boReportObjectController = boReportClientDocument.ReportDefController.ReportObjectController;
// Get a handle on the ReportObjectController so we can manipulate the TextObject
foreach (CrystalDecisions.ReportAppServer.ReportDefModel.ReportObject boReportObject in boReportObjectController.GetAllReportObjects())
if (boReportObject.Kind == CrystalDecisions.ReportAppServer.ReportDefModel.CrReportObjectKindEnum.crReportObjectKindText)
boOldTextObject = (CrystalDecisions.ReportAppServer.ReportDefModel.TextObject)boReportObject;
boNewTextObject = (CrystalDecisions.ReportAppServer.ReportDefModel.TextObject)boOldTextObject.Clone(true);
// Clear out all paragraphs from the current text object
boNewTextObject.Paragraphs.RemoveAll();
// Create a new Paragraph to add to our TextObject
boParagraph = new CrystalDecisions.ReportAppServer.ReportDefModel.Paragraph();
// Create a new ParagraphTextElement to be added to our paragraph
boParagraphTextElement = new CrystalDecisions.ReportAppServer.ReportDefModel.ParagraphTextElement();
boParagraphTextElement.Text = "The value of my parameter is: ";
boParagraph.ParagraphElements.Add(boParagraphTextElement);
// Create a new ParagraphFieldElement (our parameter field) to be added to our paragraph
boParagraphFieldElement = new CrystalDecisions.ReportAppServer.ReportDefModel.ParagraphFieldElement();
boParagraphFieldElement.Kind = CrystalDecisions.ReportAppServer.ReportDefModel.CrParagraphElementKindEnum.crParagraphElementKindField;
boParagraphFieldElement.DataSource = "{?Currency}";
boParagraph.ParagraphElements.Add(boParagraphFieldElement);
boNewTextObject.Paragraphs.Add(boParagraph);
boReportObjectController.Modify(boOldTextObject, boNewTextObject);
break;
Session.Add("Report", boReportDocument);
Similar Messages
-
Composite control - change text property of textbox from .cs file
Hi All,
I have created a composite control with dropdowns and hiddenfield for datepicker. Now when I change the value of dropdown from browser - client side then its value is retained on postback. But when I change value programmatically its not reflected on
screen.
using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.ComponentModel;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
namespace GOV.Framework.Portal.Controls
/// <summary>
/// Simple DateTimePicker control that uses jQuery UI DatePicker to pop up
/// a date, time or both picker.
/// </summary>
[ToolboxBitmap(typeof(System.Web.UI.WebControls.Calendar)), DefaultProperty("SelectedValue"),
ToolboxData("<{0}:DateTimePicker runat=\"server\"></{0}:DateTimePicker>"), PersistenceMode(PersistenceMode.InnerProperty)]
public class DateTimePicker : WebControl
#region "Global Variables"
public enum DisplayControls
TextBox,
Dropdown
public enum DisplayModes
Button,
ImageButton,
AutoPopup,
Inline,
public enum DisplayTypes
Time,
Date,
DateTime
public enum DisplayMonthTypes
Full,
Short
private enum DisplayYearTypes
Full,
Short
private DropDownList ddlDay = new DropDownList();
private DropDownList ddlMonth = new DropDownList();
private DropDownList ddlYear = new DropDownList();
private TextBox txtDate = new TextBox();
private Label lblMsg = new Label();
private System.Web.UI.WebControls.Image imgCal = new System.Web.UI.WebControls.Image();
private HiddenField hdnDate = new HiddenField();
private DisplayModes _DisplayMode = DisplayModes.ImageButton;
private DisplayControls _DisplayControl = DisplayControls.TextBox;
private DisplayTypes _DisplayType = DisplayTypes.DateTime;
private int _StepMinutes = 1;
private int _StepHours = 1;
private DateTime? _MinDate = null;
private DateTime? _MaxDate = null;
private string _OnClientSelect = "";
private string _ButtonImage = "../Images/calendar.png";
private string _CalendarCss = "WebResource";
private string _CalendarJs = "../scripts/timepicker.js";
private DisplayMonthTypes _DisplayMonthType = DisplayMonthTypes.Full;
private DisplayYearTypes _DisplayYearType = DisplayYearTypes.Full;
private int _minYear = DateTime.Now.Year - 25;
private int _maxYear = DateTime.Now.Year;
private int _minMonth = 1;
private int _maxMonth = 31;
private int _minDay = 1;
private int _maxDay = 28;
private string _dateControlClientId = string.Empty;
DateTime? _SelectedDate = null;
private bool _DisplayMessageLabel = true;
private short _tabIndex;
private const string vwst_SelectedDate = "_SelectedDate";
#region "ErrorMessages"
private const string SelectedDate_GreaterThan_MaxDate = "SelectedDate can not be greater than MaxDate";
private const string MaxDate_LessThan_SelectedDate = "MaxDate can not be less than SelectedDate";
private const string SelectedDate_LessThan_MinDate = "SelectedDate can not be less than MinDate";
private const string MinDate_GreaterThan_SelectedDate = "MinDate can not be greater than SelectedDate";
#endregion
#endregion
#region "Properties"
#region "Private Properties"
[Description("Determines display full or short(yy) year")]
[Category("DateTime Selection"), DefaultValue(typeof(DisplayTypes), "string")]
private DisplayYearTypes DisplayYearType
get
return _DisplayYearType;
set
_DisplayYearType = value;
[Description("Determines minimum year to be displayed in dropdown : Default currentyear - 25")]
[Category("DateTime Selection"), DefaultValue(typeof(DisplayTypes), "int")]
private int MinYear
get
if (MinDate != null)
_minYear = MinDate.Value.Year;
else
_minYear = DateTime.Now.Year - 25;
return _minYear;
//set
// _minDisplayYear = value;
[Description("Determines maximum year to be displayed in dropdown : Default currentyear")]
[Category("DateTime Selection"), DefaultValue(typeof(DisplayTypes), "int")]
private int MaxYear
get
if (MaxDate != null)
_maxYear = MaxDate.Value.Year;
else
_maxYear = DateTime.Now.Year;
return _maxYear;
//set
// _maxDisplayYear = value;
private string DateControlClientId
get
if (DisplayControl == DisplayControls.Dropdown)
_dateControlClientId = hdnDate.ClientID;
else
_dateControlClientId = txtDate.ClientID;
return _dateControlClientId;
[Description("Determines minimum month of min date : default 1")]
[Category("DateTime Selection"), DefaultValue(1)]
private int minMonth
get
if (MinDate != null)
_minMonth = MinDate.Value.Month;
else
_minMonth = 1;
return _minMonth;
[Description("Determines max months of max date: Default 12")]
[Category("DateTime Selection"), DefaultValue(12)]
private int maxMonth
get
if (MaxDate != null)
_maxMonth = MaxDate.Value.Month;
else
_maxMonth = 1;
return _maxMonth;
[Description("Determines minimum day : Defualt 1")]
[Category("DateTime Selection"), DefaultValue(1)]
private int minDay
get
if (MinDate != null)
_minDay = MinDate.Value.Day;
else
_minDay = 1;
return _minDay;
[Description("Determines max day: Defualt last day of max month")]
[Category("DateTime Selection"), DefaultValue(30)]
private int maxDay
get
if (MaxDate != null)
_maxDay = MaxDate.Value.Day;
else
_maxDay = DateTime.DaysInMonth(MaxYear, maxMonth);
return _maxDay;
#endregion
#region "Public Properties"
/// <summary>
/// The currently selected datetime
/// </summary>
[Category("DateTime Selection")]
public DateTime? SelectedValue
get
DateTime dt = new DateTime();
if (DisplayControl == DisplayControls.TextBox && txtDate.Text != "")
DateTime.TryParse(txtDate.Text, out dt);
else if (DisplayControl == DisplayControls.Dropdown && hdnDate.Value != "")
DateTime.TryParse(hdnDate.Value, out dt);
if (dt != null && dt != new DateTime())
_SelectedDate = dt;
else
_SelectedDate = null;
return _SelectedDate;
set
if (!value.HasValue)
txtDate.Text = "";
hdnDate.Value = "";
else
if (value != null && MinDate != null && value < MinDate)
throw new ArgumentOutOfRangeException("SelectedValue", SelectedDate_LessThan_MinDate);
if (value != null && MaxDate != null && value > MaxDate)
throw new ArgumentOutOfRangeException("SelectedValue", SelectedDate_GreaterThan_MaxDate);
string dateFormat = this.DateTimeFormat;
//if ( dateFormat == "Auto")
// dateFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
if (DisplayControl == DisplayControls.TextBox)
txtDate.Text = value.Value.ToString(dateFormat);
else if (DisplayControl == DisplayControls.Dropdown)
hdnDate.Value = value.Value.ToString(dateFormat);
_SelectedDate = value;
if (DisplayControl == DisplayControls.Dropdown)
setDropDownValue(value);
[Description("Determines display textbox or dropdowns")]
[Category("DateTime Selection"), DefaultValue(typeof(DisplayModes), "TextBox")]
public DisplayControls DisplayControl
get { return _DisplayControl; }
set { _DisplayControl = value; }
[Description("Determines how the datepicking option is activated")]
[Category("DateTime Selection"), DefaultValue(typeof(DisplayModes), "ImageButton")]
public DisplayModes DisplayMode
get { return _DisplayMode; }
set { _DisplayMode = value; }
[Description("Determines what datetimepicker should return")]
[Category("DateTime Selection"), DefaultValue(typeof(DisplayTypes), "DateTime")]
public DisplayTypes DisplayType
get
return _DisplayType;
set
_DisplayType = value;
[Description("Increment minute factor when using the time picker.")]
[Category("DateTime Selection"), DefaultValue(1)]
public int StepMinutes
get
return _StepMinutes;
set
_StepMinutes = value;
[Description("Increment hour factor when using the time picker.")]
[Category("DateTime Selection"), DefaultValue(1)]
public int StepHours
get
return _StepHours;
set
_StepHours = value;
private string _DateTimeFormat = CultureInfo.CurrentCulture != null ? CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern : "dd/MM/yyyy";
[Description("Determines the Date Format used. Auto uses CurrentCulture.DateTimeFormat.ShortDatePattern. Format: MM month, dd date, yyyy year symbol")]
[Category("DateTime Selection"), DefaultValue("dd/MM/yyyy")]
public string DateTimeFormat
get
return _DateTimeFormat;
set
_DateTimeFormat = value;
[Description("Minumum allowable date. Leave blank to allow any date")]
[Category("DateTime Selection"), DefaultValue(typeof(DateTime?), null)]
public DateTime? MinDate
get
return _MinDate;
set
if (value != null && SelectedValue != null && value > SelectedValue)
throw new ArgumentOutOfRangeException("MinDate", MinDate_GreaterThan_SelectedDate);
_MinDate = value;
[Description("Maximum allowable date. Leave blank to allow any date.")]
[Category("DateTime Selection"), DefaultValue(typeof(DateTime?), null)]
public DateTime? MaxDate
get
return _MaxDate;
set
if (value != null && SelectedValue != null && value < SelectedValue)
throw new ArgumentOutOfRangeException("MaxDate", MaxDate_LessThan_SelectedDate);
_MaxDate = value;
[Description("Client event handler fired when a date is selected")]
[Category("DateTime Selection"), DefaultValue("")]
public string OnClientSelect
get
return _OnClientSelect;
set
_OnClientSelect = value;
[Description("Url to a Calendar Image. Applies only if the DisplayMode = ImageButton")]
[Category("DateTime Resource"), DefaultValue("../Images/calendar.png")]
public string ButtonImage
get { return _ButtonImage; }
set { _ButtonImage = value; }
[Category("DateTime Resource"), Description("The CSS that is used for the calendar or empty for default."), DefaultValue("WebResource")]
public string CalendarCss
get { return _CalendarCss; }
set { _CalendarCss = value; }
[Description("Location for the calendar JavaScript or empty for default.")]
[Category("DateTime Resource"), DefaultValue("../scripts/timepicker.js")]
public string CalendarJs
get { return _CalendarJs; }
set { _CalendarJs = value; }
[Description("Determines what to Display full Month name or short month name")]
[Category("DateTime Selection"), DefaultValue(typeof(DisplayTypes), "string")]
public DisplayMonthTypes DisplayMonthType
get
return _DisplayMonthType;
set
_DisplayMonthType = value;
[Description("Display static label for msg below date control")]
[Category("DateTime Selection"), DefaultValue(true)]
public bool DisplayMessageLable
get { return _DisplayMessageLabel; }
set { _DisplayMessageLabel = value; }
[Bindable(true)]
[DefaultValue("false")]
public override short TabIndex
get
return _tabIndex;
set
_tabIndex = value;
ddlDay.TabIndex = value;
ddlMonth.TabIndex = value;
ddlYear.TabIndex = value;
imgCal.TabIndex = value;
#endregion
#endregion
#region "Events"
public DateTimePicker()
this.Width = Unit.Pixel(80);
/// <summary>
/// Load all controls
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)
base.OnInit(e);
//Controls.Clear();
//CreateAndAddControls();
/// <summary>
/// Add Child controls - Dropdowns and textbox;
/// </summary>
protected override void CreateChildControls()
base.CreateChildControls();
Controls.Clear();
CreateAndAddControls();
/// <summary>
/// Load all controls
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)
base.OnLoad(e);
if (DisplayControl == DisplayControls.Dropdown)
if (ddlDay.Items.Count == 0 || ddlMonth.Items.Count == 0 || ddlYear.Items.Count == 0 || !Page.IsPostBack)
FillDropdowns();
generateDisplayMessage();
protected override void LoadViewState(object savedState)
base.LoadViewState(savedState);
protected override void LoadControlState(object savedState)
base.LoadControlState(savedState);
protected override object SaveViewState()
if (HasControls() && Page.IsPostBack)
ddlDay.SelectedValue = "11";
object obj = base.SaveViewState();
return obj;
protected override void TrackViewState()
base.TrackViewState();
/// <summary>
/// Most of the work happens here for generating the hook up script code
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)
base.OnPreRender(e);
// Register resources
this.RegisterResources();
string script = GenerateScript();
Page.ClientScript.RegisterStartupScript(this.GetType(), "_cal" + this.ID, script, true);
/// <summary>
/// Render Control
/// </summary>
/// <param name="writer"></param>
public override void RenderControl(HtmlTextWriter writer)
if (this.DisplayMode != DisplayModes.Inline)
base.RenderControl(writer);
else
writer.Write("<div id='" + this.ClientID + "Div'></div>");
if (HttpContext.Current == null)
if (this.DisplayMode == DisplayModes.Button)
writer.Write(" <input type='button' value='...' style='width: 20px; height: 20px;' />");
else if ((this.DisplayMode == DisplayModes.ImageButton))
string img;
if (this.ButtonImage == "WebResource")
img = this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "jQueryDatePicker.Resources.calendar.png");
else
img = this.ResolveUrl(this.ButtonImage);
writer.AddAttribute(HtmlTextWriterAttribute.Src, img);
writer.AddAttribute("hspace", "2");
writer.RenderBeginTag(HtmlTextWriterTag.Img);
writer.RenderEndTag();
/// <summary>
/// Render Control
/// </summary>
/// <param name="writer"></param>
protected override void Render(HtmlTextWriter writer)
RenderControls(writer);
#endregion
#region "Methods"
/// <summary>
/// Set properties of control
/// </summary>
private void CreateAndAddControls()
txtDate.ID = "_txtDate";
txtDate.CssClass = "dpDate";
ddlDay.ID = "_ddlDay";
ddlMonth.ID = "_ddlMonth";
ddlYear.ID = "_ddlYear";
imgCal.ID = "_imgCal";
imgCal.CssClass = "trigger";
imgCal.ImageUrl = this.ButtonImage;
//imgCal.Visible = false;
hdnDate.ID = "_hdnDate";
lblMsg.ID = "_lblMsg";
lblMsg.CssClass = "MsgLabel";
if (DisplayControl == DisplayControls.Dropdown)
txtDate.Visible = false;
this.Controls.Add(ddlDay);
this.Controls.Add(ddlMonth);
this.Controls.Add(ddlYear);
this.Controls.Add(hdnDate);
else
txtDate.Visible = true;
this.Controls.Add(txtDate);
this.Controls.Add(imgCal);
this.Controls.Add(lblMsg);
/// <summary>
/// Add Controls to the control
/// </summary>
private void RenderControls(HtmlTextWriter writer)
//if (ChildControlsCreated)
// return;
AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Class, "datePickerTable", false);
writer.RenderBeginTag(HtmlTextWriterTag.Table);//start of table
writer.RenderBeginTag(HtmlTextWriterTag.Tr);//start of tr1
if (DisplayControl == DisplayControls.Dropdown)
writer.RenderBeginTag(HtmlTextWriterTag.Td);
ddlDay.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
ddlMonth.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
ddlYear.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
hdnDate.RenderControl(writer);
writer.RenderEndTag();
else
writer.RenderBeginTag(HtmlTextWriterTag.Td);
txtDate.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
//Control ltrl1 = new LiteralControl();
//writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "None");
//writer.RenderBeginTag(HtmlTextWriterTag.Div);
////ltrl1.RenderControl(writer);
//imgCal.RenderControl(writer);
//writer.RenderEndTag();//end of div
writer.Write("<div style=\"display:none\">");
imgCal.RenderControl(writer);
writer.Write("</div>");
writer.RenderEndTag();
writer.RenderEndTag();//end of tr1
writer.RenderBeginTag(HtmlTextWriterTag.Tr);//start of tr
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "4", false);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
lblMsg.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();// end of tr2
writer.RenderEndTag();// end of table
//string newTable = "<table class='datePickerTable'";
//string endTable = "</table>";
//string newTr = "<tr>";
//string endTr = "</tr>";
//string newTd = "<td>";
//string endTd = "</td>";
////Controls.Clear();
//InitControls();
//Controls.Add(new LiteralControl(newTable + newTr + newTd));
//if (DisplayControl == DisplayControls.Dropdown)
// Controls.Add(ddlDay);
// Controls.Add(new LiteralControl(endTd + newTd));
// Controls.Add(ddlMonth);
// Controls.Add(new LiteralControl(endTd + newTd));
// Controls.Add(ddlYear);
// Controls.Add(new LiteralControl(endTd + newTd));
//Controls.Add(txtDate);
//Controls.Add(hdnDate);
//Controls.Add(new LiteralControl(endTd + newTd));
//Controls.Add(new LiteralControl("<div style=\"display:none\">"));
//Controls.Add(imgCal);
//Controls.Add(new LiteralControl("</div>"));
//Controls.Add(new LiteralControl(endTd + endTr));
//Controls.Add(new LiteralControl(newTr + "<td colspan=4>"));
//Controls.Add(lblMsg);
//Controls.Add(new LiteralControl(endTd + endTr + endTable));
/// <summary>
/// Code that embeds related resources (.js and css)
/// </summary>
/// <param name="scriptProxy"></param>
protected void RegisterResources()
// Load the calandar script
string script = this.CalendarJs;
// Load jQuery Calendar Scripts
if (script == "WebResource")
Page.ClientScript.RegisterClientScriptResource(this.GetType(), "jQueryDatePicker.Resources.ui.datepicker.js");
else if (!string.IsNullOrEmpty(script))
Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "__jqueryCalendar", this.ResolveUrl(script));
// Load the related CSS reference into the page
script = this.CalendarCss;
if (script == "WebResource")
script = Page.ClientScript.GetWebResourceUrl(this.GetType(), "jQueryDatePicker.Resources.ui.datepicker.css");
else if (!string.IsNullOrEmpty(script))
script = this.ResolveUrl(this.CalendarCss);
// Register Calendar CSS 'manually'
string css = @"<link href=""" + script + @""" type=""text/css"" rel=""stylesheet"" />";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "_calcss", css, false);
/// <summary>
/// Converts a date to a JavaScript date string in UTC format
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
private static string EncodeJsDate(DateTime date)
return "new Date(\"" + date.ToString("U") + " UTC" + "\")";
/// <summary>
/// Generate Javascript for Datepicker plugin
/// </summary>
/// <returns></returns>
private string GenerateScript()
// To capture and map the various option parameters
StringBuilder sbOptions = new StringBuilder(512);
sbOptions.Append("{");
//jQuey Script
StringBuilder sbStartupScript = new StringBuilder(400);
sbStartupScript.AppendLine("jQuery(document).ready( function() {");
string dateFormat = this.DateTimeFormat;
if (!string.IsNullOrEmpty(dateFormat))
dateFormat = this.DateTimeFormat.Replace("MMM", "M").Replace("MM", "mm");
sbOptions.Append("dateFormat: '" + dateFormat + "'");
//string onSelect = this.OnClientSelect;
if (this.DisplayMode == DisplayModes.Button)
sbOptions.Append(",showOnFocus: false, showTrigger: '<button type=\"button\" class=\"trigger\">...</button>'");
else if (this.DisplayMode == DisplayModes.ImageButton)
string img = this.ButtonImage;
if (img == "WebResource")
img = Page.ClientScript.GetWebResourceUrl(this.GetType(), "jQueryDatePicker.Resources.calendar.png");
else
img = this.ResolveUrl(this.ButtonImage);
sbOptions.Append(",showOnFocus: false, showTrigger: '#" + imgCal.ClientID + "'");
sbOptions.Append(", onSelect: DateSelectedFromCalendar ");
if (this.MinDate.HasValue)
sbOptions.Append(",minDate: new Date(" + MinDate.Value.Year.ToString() + "," + (MinDate.Value.Month - 1).ToString() + "," + MinDate.Value.Day.ToString() + ")");
if (this.MaxDate.HasValue)
sbOptions.Append(",maxDate: new Date(" + MaxDate.Value.Year.ToString() + "," + (MaxDate.Value.Month - 1).ToString() + "," + MaxDate.Value.Day.ToString() + ")");
sbOptions.Append(",yearRange:' " + this.MinYear.ToString() + ":" + this.MaxYear.ToString() + "'");
//end of options
sbOptions.Append("}");
// Write out initilization code for calendar
if (this.DisplayMode != DisplayModes.Inline)
sbStartupScript.AppendLine("var cal = jQuery('#" + this.DateControlClientId + "').datepick(" + sbOptions.ToString() + ");");
else
sbStartupScript.AppendLine("var cal = jQuery('#" + this.ClientID + "Div').datepick(" + sbOptions.ToString() + ");");
sbStartupScript.AppendLine("var dp = jQuery.datepicker;");
if (this.SelectedValue.HasValue && this.SelectedValue.Value > new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc))
sbStartupScript.AppendLine("dp.setDateFor(cal[0],new Date('" + txtDate.Text + "'));");
sbStartupScript.AppendLine("dp.reconfigureFor(cal[0]);");
//******************* When dropdown changes then reflect it in calendar
if (DisplayControl == DisplayControls.Dropdown)
sbStartupScript.AppendLine("\r\n\r");
sbStartupScript.Append("$('#" + ddlDay.ClientID);
sbStartupScript.Append(",#" + ddlMonth.ClientID);
sbStartupScript.Append(",#" + ddlYear.ClientID + "').change(function() {");
// disable months and days when they are less then day months of minimum date
sbStartupScript.Append("$ddlDay=$('#" + ddlDay.ClientID + "');");
sbStartupScript.Append("$ddlMonth=$('#" + ddlMonth.ClientID + "');");
sbStartupScript.Append("$ddlYear=$('#" + ddlYear.ClientID + "');");
sbStartupScript.AppendLine("var minYear=" + this.MinYear.ToString() + ";");
///disable months of minimum year which are less then minumum date month
sbStartupScript.AppendLine("if($ddlYear.val()<=minYear && $('#" + this.DateControlClientId + "').val!=''){ alert('true');");
sbStartupScript.AppendLine("var minMonth=" + this.minMonth.ToString() + ";");
sbStartupScript.AppendLine("if($ddlMonth.val()<=minMonth){");//start of if of minMonth
sbStartupScript.AppendLine("$ddlMonth.val(minMonth);");
sbStartupScript.AppendLine("var minDay=" + this.minDay.ToString() + ";");
sbStartupScript.AppendLine("$ddlMonth.find('option:lt('+minMonth+')').hide();");
sbStartupScript.AppendLine("if($ddlDay.val()<=minDay)");
sbStartupScript.AppendLine("$ddlDay.val(minDay);");
sbStartupScript.AppendLine("}");// end of if of minMonth
sbStartupScript.AppendLine("else {");
sbStartupScript.AppendLine("$ddlDay.find('option').show();");
sbStartupScript.AppendLine("}");// end of else part of min month
sbStartupScript.AppendLine("$ddlDay.find('option:lt('+minDay+')').hide();");
sbStartupScript.AppendLine("}");// end of if part of min Year
sbStartupScript.AppendLine("else {");
sbStartupScript.AppendLine("$ddlMonth.find('option').show();");
sbStartupScript.AppendLine("}");// end of else part of min Year
///set date in calendar
sbStartupScript.AppendLine();
sbStartupScript.Append("$('#" + this.DateControlClientId + "').datepick('setDate', new Date(\n\r\r ");
sbStartupScript.Append("$('#" + ddlYear.ClientID + "').val(),");
sbStartupScript.Append("$('#" + ddlMonth.ClientID + "').val()-1,");
sbStartupScript.Append("$('#" + ddlDay.ClientID + "').val()));");
sbStartupScript.AppendLine("} );");
//******************* When calendar changes then reflect it in dropdown
sbStartupScript.AppendLine("\r\n\r");
sbStartupScript.AppendLine("function DateSelectedFromCalendar(dates) {");
if (DisplayControl == DisplayControls.Dropdown)
sbStartupScript.AppendLine("$('#" + ddlDay.ClientID + "').val(dates.length ? dates[0].getDate() : '');");
sbStartupScript.AppendLine("$('#" + ddlMonth.ClientID + "').val(dates.length ? dates[0].getMonth() +1 : '');");
sbStartupScript.AppendLine("$('#" + ddlYear.ClientID + "').val(dates.length ? dates[0].getFullYear() : '');");
if (!string.IsNullOrEmpty(this.OnClientSelect))
sbStartupScript.AppendLine(this.OnClientSelect + "();");
sbStartupScript.AppendLine("}");
//******************* Validation Script
sbStartupScript.AppendLine("\r\n\r");
sbStartupScript.AppendLine("$('form').validate({");
sbStartupScript.AppendLine("errorPlacement: $.datepick.errorPlacement,");
sbStartupScript.AppendLine("rules: {");
sbStartupScript.AppendLine(this.DateControlClientId + ": {");//start of format picker
sbStartupScript.AppendLine("required: true, dpDate: true}");//end of formate picker
sbStartupScript.AppendLine("}, ");// end of rules
sbStartupScript.AppendLine("messages: {");
sbStartupScript.AppendLine(this.DateControlClientId + ": 'Please enter a valid date (" + this.DateTimeFormat + ")'");
sbStartupScript.AppendLine("}");// end of messages
sbStartupScript.AppendLine("});"); //end of validate function
//******************* close document ready function
sbStartupScript.AppendLine("} );");
return sbStartupScript.ToString();
/// <summary>
/// Fill day month and year dropdown
/// </summary>
private void FillDropdowns()
//Fill Day Dropdown
ListItem liDay = new ListItem("Day", "0");
ddlDay.Items.Add(liDay);
for (int i = 1; i <= 31; i++)
ListItem li = new ListItem(i.ToString(), i.ToString());
ddlDay.Items.Add(li);
//Fill Month Dropdown
ListItem liMonth = new ListItem("Month", "0");
ddlMonth.Items.Add(liMonth);
string monthName = string.Empty;
for (int i = 1; i <= 12; i++)
switch (DisplayMonthType)
case DisplayMonthTypes.Full:
monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i);
break;
case DisplayMonthTypes.Short:
monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(i);
break;
ListItem li = new ListItem(monthName, i.ToString());
ddlMonth.Items.Add(li);
//Fill Year Dropdown
ListItem liYear = new ListItem("Year", "0");
ddlYear.Items.Add(liYear);
string yearDisplay = string.Empty;
for (int i = MinYear; i <= MaxYear; i++)
switch (DisplayYearType)
case DisplayYearTypes.Full:
yearDisplay = i.ToString();
break;
case DisplayYearTypes.Short:
yearDisplay = i.ToString().Substring(2);
break;
ListItem li = new ListItem(yearDisplay, i.ToString());
ddlYear.Items.Add(li);
setDropDownValue(this.SelectedValue);
private void generateDisplayMessage()
if (this.DisplayMessageLable)
if (this.DisplayControl == DisplayControls.TextBox)
lblMsg.Text = this.DateTimeFormat;
if (this.MinDate != null && this.MinDate.Value != new DateTime())
lblMsg.Text += " From " + this.MinDate.Value.ToString(this.DateTimeFormat);
if (this.MaxDate != null && this.MaxDate.Value != new DateTime())
lblMsg.Text += " To " + this.MaxDate.Value.ToString(this.DateTimeFormat);
private void setDropDownValue(DateTime? dt)
if (ddlDay.Items.Count != 0 && ddlMonth.Items.Count != 0 && ddlYear.Items.Count != 0)
if (dt != null && dt != new DateTime())
ddlDay.SelectedValue = ddlDay.Items.FindByValue(dt.Value.Day.ToString()).Value;
ddlMonth.SelectedValue = ddlMonth.Items.FindByValue(dt.Value.Month.ToString()).Value;
ddlYear.SelectedValue = ddlYear.Items.FindByValue(dt.Value.Year.ToString()).Value;
else
ddlDay.SelectedValue = "0";
ddlMonth.SelectedValue = "0";
ddlYear.SelectedValue = "0";
#endregion
}Usage Of Code in .ascx<cc2:DateTimePicker ID="dtpDOB" DisplayType="Date" DisplayMode="ImageButton" ButtonImage="../Images/calendar.png" runat="server"Changing Value from .cs file dtpDOB.SelectedValue = DateTime.Parse("01/01/2001");It is not reflected in screenHello,
According to your code, it's an ASP.NET user control problem. Please post in
ASP.NET forums where more web developers will give you help.
Thanks for your understanding.
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey. -
Import of SMPTE Bars in AE CS3 has unexpected results
If I export SMPTE Bars as ProRes 4:2:2: media from Final Cut Pro 7, import the resulting clip back into FCP and place it on the time line next to the original bars generated by FCP the two sets look exactly identical. If I take that same export and run it though After Effects, with nothing applied to it, render that timeline to ProRes 4:2:2 and import that resulting file into FCP it does not match.The gamma seems wrong, the I & Q signals on a vectroscope no longer line up correctly, saturation seems to be off, and the PLUGE signal appears to be clipped at black.
Am I using the wrong test pattern to test this in After Effects? If so, what pattern should I be using? Why is After Effects distorting the I & Q signal and the PLUGE signal?
Helping me down the road to solving this mystery would be greatly appreciated.
Karl NewmanHi Karl. I know there have been gamma issues in the past with ProRes and After Effects. We put significant work into CS5 to make sure everything worked correctly. Unfortunatley, we let an alpha bug slip by, though it's easily fixed by a simple text edit.
I just verified on my laptop that I get a gamma shift in CS3, but I don't get one in CS4 or CS5 with my particular setup. Which codec are you using exactly? 422, not 422HQ, or the LT/Proxy version? Do you have any other 3rd party plugins installed(AJA, Blackmagic, etc?)
It's possible I won't be able to get gamma to match perfectly in CS3, but editing the MediaCoreQTGammaRules.xml file may work if I can get more info on the exact codec(4cc) you're using.
Cheers,
Dan Ramirez
After Effects
QA Engineer -
How to dynamically change the text of a TextObject with embedded DataField?
Hi
I'm trying to dynamically change the text of a TextObject at runtime, by using the .NET library. My problem is that if one or more DatabaseFieldDefinition is embedded inside my text, I'm unable to change the "static text" only, by keeping the field, e.g. I have :
Text1 => "Contact Name: {Contact.Name}"
and I'd like to change it to anything else like:
Text1 => "Nom du Contact: {Contact.Name}"
Half of my TextObject is static text while second part comes from the dataset.
(of course the translation is dynamic - it is called at run-time and the new value to be set depends on the calling application language)
If I simply modify the Text property of my TextObject, the {Contact.Name} embedded field is not evaluated anymore by the Crystal Engine, but considered as a single text.
Using formulas or parameters looks quite difficult, because it means having many ones just for translation needs - I cannot control the way my users will create their reports and "force them" to use complex methods just in order to put a text and a value together...
Anyone knows how to deal with that ?Only way I can think of doing this:
1) Create a formula (call it lang) and enter the string "Contact Name" in it
2) Place the {Contact.Name} field next to the string
3) So now you have:
ContactName: {Contact.Name}
4) Check what localization you are after. If you need "Nom du Contact", change the lang formula so it shows "Nom du Contact" using the code below:
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Public Class Form1
Inherits System.Windows.Forms.Form
Dim Report As New CrystalReport1()
Dim FormulaFields As FormulaFieldDefinitions
Dim FormulaField As FormulaFieldDefinition
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
FormulaFields = Report.DataDefinition.FormulaFields
FormulaField = FormulaFields.Item(0)
FormulaField.Text = "[formula text]"
CrystalReportViewer1.ReportSource = Report
End Sub
I realize this may not give you consistent spacing as the translations may have strings of differnt length. Perhaps someone has other idea(s)... -
Why capital letters change in lower after copying them from a PDF document (Made by InDesign), or otherwise, why some uppercase are in fact lowercase when I look in the Text Property in any PDF Reader.
your home page to get into your Web site should be index.html (for Mac) or index.htm (on PC)
You can name it something other than index, but will be harder to find. when you create the subjects and link to them, they can can be named anything with the html extension Or if your using PHP end in .php. There is a Microsoft type asp or aspx but your hosting service has to set up using windows server system.
My hosting service use a Linux server normally but can convert Windows for a Fee. UNIX Linux has no concept of asp or aspx.
See this : https://skitch.com/pjonescet/8mnnx/dreamweaver -
How to modify the text property of a textobject when it contains a formula.
I have a textobject with a text property of
"Accounting Period to {@periodend}"
When I try and modify it though it changes {@periodend} to literal text and it doesn't get evaluated.
I'd like to modify the textobject without losing the formula.
Thanks in advance,
JSorry about that. I'm using
VB.Net 2008 (for prototype, translating to C# for production) 9.0.30729.4462 QFE.
CR2008 12.3.1.684
CrystalDecisions.CrystalReports.Engine 12.0.2000.0
CrystalDecisions.CrystalReports.Design 12.0.2000.0
CrystalDecisions.Shared 12.0.2000.0
I'm thinking that a clue might reside in the RAS but my version iof CrystalDecisions.ReportAppServer.ReportDefModel is 12.0.1100.0
J -
0FISCPER text variable "External Characteristic Value Key" has changed
Hello!
Could somebody help and tell, why in BI7.0 version (but 3.x RRMX version) the format of the 0FISCPER text variable (also other time characteristics) has changed from 001.2007 (version 3.x) to 0/1 .0700 (version 7.0)?
I cannot understand the logic of the new Exterternal characteristic calue key. What can I do about it?
Thanks for your help, gurus!
BR, Auli PeltolaI figured out myself the reason for the problem: in the new version the fiscal year variant has to be defined in report so that the 0FISCPER would work.
-
How to change the colour of text property in Radio button?
Hello All,
I am having some radio buttons in my application. i want to change the colour of text property by default it is black.
Could any one please suggest me how to do it?
Thanks in advance.Currently you cannot, it is a known (and hopefully reported, and at least addressed for next version) bug (or limitation, as they rushed to get the components out before JavaOne...).
People reported they just put an empty text and put a label beside the component. Ugly workaround (bad when the component will be complete) but if it works... :-) -
How to Embed some specialy Font and Change Text Font Property in SDK?
hello everyone,
when i write my plugin,i met with some problem about the Font.
first,i add some text in the PDF Page using the JavaScript,and want to use some special,and all failed and use some font instead which acrobat own.does the acrobat can embed some font that installed in the system? and how to use it in the sdk?
second,i can use the touchup tools to change the text property,such as the font,size and scaling,how can i do it in my plugin in the sdk suppose i can get the text object?
thanks.WHICH APIs are you using to add text to a PDF via JavaScript? There are a few different ones and they each have various options with respect to fonts.
As to the general answer, if the font allows embedding, then we will embed it - if it does not, then we won't. That simple.
There are no APIs for JavaScript to change such attributes, only to plugins. -
How to change properties for some controls in runtime ?
hi,
I would like to change some of the properties for some controls in front panel in runtime. Number of control properties I want to change is depending of a log file user opens in final application.
I attach an example where I'm trying to change the visibility of numeric controls. Problem I have I don't know which reference to connect to property node in case the control in for loop is not a numeric control. The example relies to label.text property but I could use the more generic classname property as well.
regards,
petri
Solved!
Go to Solution.
Attachments:
dynamic reference.vi 11 KBpcardinale wrote:
Initially, a control has no caption. It's not just that the caption string is empty and the caption not visible, but the caption object does not exist.
I think this should probably be changed in future versions, because even if each control had a caption, it would still be a negligible small part of the VI. The current behavior made sense many years ago where HD and memory space was very precious. Not any more!
This issue comes up often enough that it warrants addressing the root of the problem.
It is hard to convince the casual that the caption does not exist if he can simply do a "show caption" at edit time and it will show in all glory, even with the default set to the current label. It is confusing!
There is even an idea about this that seems worth supporting (also read the link in the discussion).
What do you think?
LabVIEW Champion . Do more with less code and in less time . -
I am working no one SSRS my table headers are freeze cangrow property is false and my report is working perfect while rendering data on RDL and i want same report after exporting in Excel also , i want my table header to be freeze and wrap text property
to work after exporting in my report in excel but its not working ,is there any solution ? any patch ? any other XML code for different rendering ?Hi Amol,
According to your description, you find the wrap text property and fix column is not working after exporting into Excel. Right?
In Reporting Services, when exporting to excel file, it has limitation for textbox.
Text boxes are rendered within one Excel cell. Font size, font face, decoration, and font style are the only formatting that is supported on individual text within an Excel cell.
Excel adds a default padding of approximately 3.75 points to the left and right sides of cells. If a text box’s padding settings are less than 3.75 points and is just barely wide enough to accommodate the text, the text may wrap in Excel.
In this scenario, it supposed to be wrap text unless you merge cells. If cells are merged, word-wrap does not work correctly. If any merged cells exist on a row where a text box is rendered with the
AutoSize property, autosize will not work. For the Fix Data Property, it can't be working in Excel. These are features when exporting to Excel. We can't change it because it's by design.
Reference:
Exporting to Microsoft Excel (Report Builder and SSRS)
If you have any question, please feel free to ask.
Best Regards,
Simon Hou -
How to change a property programmatically
Hello,
How can I change a property during runtime? Like, change the label of a button, or change the header text of a table.
regards,
arnoldHi Arnold,
You need to get an instance of the UI element at runtime. You can get this only in WDDoModifyView
IWDLabel lab = (IWDLabel)view.getElement(<labelID>);
lab.set<property>(<value>);
Warm Regards,
Murtuza -
I have a Director MX 2004 based training course that is
periodically getting the following error:
property not found: #text
This training program was developed in Director 6.5 and
updated last year to MX 2004. The training program had been running
without error for six years prior to the update. I didn't update
the script that is causing the error until after receiving the
error reports.
After getting the error report I was able to reproduce the
error while running in MX 2004 and the error said:
Script error: Property not found
set the text of member "IN" = tempIN & sp &
pretempIN
#text
I checked the debugger and the local variables were all valid
and nothing seem out of place. The field cast member "IN" exists
and the member's sprite is static in the score (i.e., it's not
being dynamically created).
Since I couldn't figure out what the problem was I updated
the field update scripts to the new syntax:
member("INText", "Internal").text = tempIN & sp &
pretempIN
I also changed the name of the cast member thinking that the
name "IN" may be causing the problem. There are no other cast
members of the same name. Unfortunately, I'm still getting the same
error. There are other field member sprites that are getting
updated successfully before this line of code but for some reason
this particular field member sprite is causing the error, even
after changing the name of the member. I've since moved my text
formatting script to the frame script in the score where the field
members are located and tried preloading the member but neither of
those changes helped.
This error is very sporadic and I've only been able to
reproduce it few times on my local machine, and not since I updated
the script syntax and the field name, but my client is still
encountering the error. I checked that my client's program file
installation is up-to-date and they're running the newest
executable.
Any ideas of what might be causing the problem? I'm
stumped...
Markquote:
You seem to be using #field member and #text member
interchangably. They're
not the same type of member and they have different
properties.
Actually, I'm not. It's a field member. The member's name
"INText" probably led you to believe it's a text member. I changed
the member's name from "IN" to "INText" as I thought perhaps the
"IN" may be causing the problem. The member has always been a field
member. I'm not formatting the field or anything like that, I'm
only replacing the field contents. I don't use Director much
anymore, other than this project, but having used both 7.5 and MX,
I assumed that I could access the text property of a field using
the member("myField", "castName").text syntax as per the docs.
As for the concatenation, the variables are all strings so it
shouldn't really matter. The real problem is that the field
member's text property can't be found, not what I'm putting into
it. And the fact that it only happens occasionally is what I can't
figure out. Since I encountered the error myself inside of Director
and was able to run the debugger I was able to see all of the
variables in the debugger and check for the field member and its
properties in the Message window and everything looked okay.
quote:
To double check the member coflickt issue (director always
operates on the first occurance of a member name
It's definitely the only member using the name "INText",
plus, I checked all cast libs and it's a unique name.
When I originally converted the movie I do recall that I had
another cast member named "IN", the original name of the field
member, when I converted the movie. I can't remember the type of
member it was but I'm pretty sure it wasn't a field. Perhaps the
movie still has some kind of reference to that not field member and
may point to it occasionally, even though I've since renamed the
original field cast member to "INText".
Mark -
Change text object format problem..
hello!
when i'm trying to change the format of textobject in skd(using java).
its only change the format of the first object in the textobject.
TextObject p2 = new TextObject();
p2 = (TextObject) allobj.getReportObject(8);
TextObject p2old = (TextObject) p2.clone(true);
FontColor p2c = new FontColor();
p2c = (FontColor) p2old.getFontColor();
p2c.setColor(Color.RED);
roc.modify(p2, p2old);
anyone know why?
thanksDid you ever solve this?
I don't know if my problem is similar to yours, but here's what I'm trying to do:
When you have multiple lines/paragraphs in a text object, each can have it's own horizontal formating. Any ideas how these can be changed independently via RDC?
When I change the property HorAlignment on a TextObject it changes it for all the paragraphs, but in the CR designer you can modify each independently. -
Can't change text once I've finalized it!
I've been using Photoshop for years, so I know all the basics. And I've never run into this before. I created a document with text boxes and images. Everything was fine to that point. But when I went back to re-word the text boxes and change text color, I could not do it. I tried everything: be sure that layer is selected, be sure I have the type tool enabled, and click somewhere in the existing text.
Nothing doing. No matter what I did, it insisted on starting a new text layer. I could not access the text itself to change it.
I could transform it or move it but it will not let me change the text itself or the text color.
I'm using the PS cloud version and running Windows 7.
I ran into this a few weeks ago, and rebooting my computer solved the problem -- or so I thought. Apparently it didn't solve it permanently.
Help, please! This was due yesterday and my client is understandably not amused.
Thanks.Now I can change text in any text box except the one titled "spinetext", which is highlighted in the layers panel. Obviously I'm doing something wrong, but I've designed a lot of these covers, and never had trouble changing the spine text before.
I finally had to recreate that layer in a new document and import it into this one -- but the text remains unchangeable in this layer.
(For what it's worth, "Layer 1" is the template, which I turn off when I have inserted all the elements, so it has nothing to do with this layer.)
Thanks for your help!
Maybe you are looking for
-
How to load a PDF from page 1 in IE
I am currenty working on a fllex based web application that needs to load multiple PDF documents. The pdfs are loaded and displayed properly but after the user scrolls couple of pages/ lines and switches to a new document, IE saves the last visit cur
-
How do I set up two profiles on my computer but still utilize all programs and files?
How do I set up two profiles on my computer but still utilize all programs and files? I want to set up two profiles so my wife and I can utilize two iTunes accounts and different internet settings, but when I set up an administrator profile for her
-
Sorry, but I don't know if this is more a LabVIEW question or a networking or ftp quesiton - how do I approach this need? We have a machine programmed in LabVIEW and we need it to write a text file of process run data to a folder on our network. I th
-
How to allow server behaviours in .html files?
Hi all, I'm trying to get DW9 to allow server behaviours in files with .htm and .html extensions. I've edited 'MMDocumentTypes.xml' accordingly but this results in a C++ application error so I'm guessing it's not the right way. I'm pretty sure it wor
-
Storing sql recordset in an array, or list, or similar
I should probably understand hashmaps better before posting this, but if someone could point me in the right direction, I'd appreciated it. I'd like to store a sql resultset having an integer and a string in an array, or list, or similar. That is, I'