This is a migrated thread and some comments may be shown as answers.

Problem at setting the width of TextBox dynamically basing on the retrieving data from source

1 Answer 154 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Edward Pauley
Top achievements
Rank 1
Edward Pauley asked on 29 Apr 2011, 10:34 PM
Hi

I read the post at http://www.telerik.com/help/reporting/understanding-events.html to know how to retrieve the value of the data from datasource before rendering all of the parts of the report

However, no matter what i tried to set the width of my TextBoxSeg ... the FIRST row data won't be reformatted correctly
Basically i want to display something similar to this XX-XX-XXXX-XXX-XXX  . But i don't know EXACTLY how many characters for each segment. And that information only available when the data has been bounded to the textbox.
So I use the ItemDataBound event. Inside that event , I will find the length of the Data of the TextBox and set the width of the textBox corresponding to the Length.
Then i just need to move the Location of other segments correspondingly
That's the whole idea 

I also attach the image of my report result to let you see the problem of rendering
this is the code
private Unit oneUnit = new Unit(100/8);
        private Unit originalTextSeg1Width;
        private Unit originalTextSeg2Width;
        private Unit originalTextSeg3Width;
        private Unit originalTextSeg4Width;
        private Unit originalTextSeg5Width;
        private Unit originalTextDash1X;
        private Unit originalTextDash2X;
        private Unit originalTextDash3X;
        private Unit originalTextDash4X;
        
        private Unit originalTextSeg2X;
        private Unit originalTextSeg3X;
        private Unit originalTextSeg4X;
        private Unit originalTextSeg5X;
        public GLIncomeStatementDT()
        {
            //
            // Required for telerik Reporting designer support
            //
            InitializeComponent();
            //Original Width
            originalTextSeg1Width = textSeg1.Width;
            originalTextSeg2Width = textSeg2.Width;
            originalTextSeg3Width = textSeg3.Width;
            originalTextSeg4Width = textSeg4.Width;
            originalTextSeg5Width = textSeg5.Width;
            //Original X location
            originalTextDash1X = textDash1.Location.X;
            originalTextDash2X = textDash2.Location.X;
            originalTextDash3X = textDash3.Location.X;
            originalTextDash4X = textDash4.Location.X;
             
            originalTextSeg2X = textSeg2.Location.X;
            originalTextSeg3X = textSeg3.Location.X;
            originalTextSeg4X = textSeg4.Location.X;
            originalTextSeg5X = textSeg5.Location.X;
            //
            textSeg1.ItemDataBound += new EventHandler(textSeg1_ItemDataBound);
            textSeg2.ItemDataBound += new EventHandler(textSeg2_ItemDataBound);
            textSeg3.ItemDataBound += new EventHandler(textSeg3_ItemDataBound);
            textSeg4.ItemDataBound += new EventHandler(textSeg4_ItemDataBound);
            textSeg5.ItemDataBound += new EventHandler(textSeg5_ItemDataBound);
            this.DataSource = null;
            this.NeedDataSource += new EventHandler(FilteredReport_NeedDataSource);
             
            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }
 
        #region Setup Seg's Width dynamically
        
        void textSeg5_ItemDataBound(object sender, EventArgs e)
        {
            Telerik.Reporting.Processing.TextBox textSeg5Position = (Telerik.Reporting.Processing.TextBox)sender;
            textSeg5.Style.BackgroundColor = Color.Purple;
            textSeg5.Width = originalTextSeg5Width * (textSeg5Position.Text.Length);
        }
 
        void textSeg4_ItemDataBound(object sender, EventArgs e)
        {
            Telerik.Reporting.Processing.TextBox textSeg4Position = (Telerik.Reporting.Processing.TextBox)sender;
            textSeg4.Style.BackgroundColor = Color.Yellow;
            textSeg4.Width = originalTextSeg4Width * (textSeg4Position.Text.Length);
 
 
 
 
 
            textDash4.Location = new PointU() { X = originalTextDash4X + textSeg4.Width - oneUnit, Y = textDash4.Location.Y };
            textSeg5.Location = new PointU() { X = originalTextSeg5X + textSeg4.Width - oneUnit, Y = textSeg5.Location.Y };
        }
 
        void textSeg3_ItemDataBound(object sender, EventArgs e)
        {
            Telerik.Reporting.Processing.TextBox textSeg3Position = (Telerik.Reporting.Processing.TextBox)sender;
            textSeg3.Style.BackgroundColor = Color.Green;
            textSeg3.Width = originalTextSeg3Width * (textSeg3Position.Text.Length);
 
 
 
 
            textDash3.Location = new PointU() { X = originalTextDash3X + textSeg3.Width - oneUnit, Y = textDash3.Location.Y };
            textSeg4.Location = new PointU() { X = originalTextSeg4X + textSeg3.Width - oneUnit, Y = textSeg4.Location.Y };
            textDash4.Location = new PointU() { X = originalTextDash4X + textSeg3.Width - oneUnit, Y = textDash4.Location.Y };
            textSeg5.Location = new PointU() { X = originalTextSeg5X + textSeg3.Width - oneUnit, Y = textSeg5.Location.Y };
        }
 
        void textSeg2_ItemDataBound(object sender, EventArgs e)
        {
            Telerik.Reporting.Processing.TextBox textSeg2Position = (Telerik.Reporting.Processing.TextBox)sender;
            textSeg2.Style.BackgroundColor = Color.Blue;
            textSeg2.Width = originalTextSeg2Width * (textSeg2Position.Text.Length);
 
 
            textDash2.Location = new PointU() { X = originalTextDash2X + textSeg2.Width - oneUnit, Y = textDash2.Location.Y };
            textSeg3.Location = new PointU() { X = originalTextSeg3X + textSeg2.Width - oneUnit, Y = textSeg3.Location.Y };
            textDash3.Location = new PointU() { X = originalTextDash3X + textSeg2.Width - oneUnit, Y = textDash3.Location.Y };
            textSeg4.Location = new PointU() { X = originalTextSeg4X + textSeg2.Width - oneUnit, Y = textSeg4.Location.Y };
            textDash4.Location = new PointU() { X = originalTextDash4X + textSeg2.Width - oneUnit, Y = textDash4.Location.Y };
            textSeg5.Location = new PointU() { X = originalTextSeg5X + textSeg2.Width - oneUnit, Y = textSeg5.Location.Y };
        }
        void textSeg1_ItemDataBound(object sender, EventArgs e)
        {
            Telerik.Reporting.Processing.TextBox textSeg1Position = (Telerik.Reporting.Processing.TextBox)sender;
            textSeg1.Style.BackgroundColor = Color.Red;
            textSeg1.Width = originalTextSeg1Width * (textSeg1Position.Text.Length);
 
 
            textDash1.Location = new PointU() { X = originalTextDash1X + textSeg1.Width - oneUnit, Y = textDash1.Location.Y };
            textSeg2.Location = new PointU() { X = originalTextSeg2X + textSeg1.Width - oneUnit, Y = textSeg2.Location.Y };
            textDash2.Location = new PointU() { X = originalTextDash2X + textSeg1.Width - oneUnit, Y = textDash2.Location.Y };
            textSeg3.Location = new PointU() { X = originalTextSeg3X + textSeg1.Width - oneUnit, Y = textSeg3.Location.Y };
            textDash3.Location = new PointU() { X = originalTextDash3X + textSeg1.Width - oneUnit, Y = textDash3.Location.Y };
            textSeg4.Location = new PointU() { X = originalTextSeg4X + textSeg1.Width - oneUnit, Y = textSeg4.Location.Y };
            textDash4.Location = new PointU() { X = originalTextDash4X + textSeg1.Width - oneUnit, Y = textDash4.Location.Y };
            textSeg5.Location = new PointU() { X = originalTextSeg5X + textSeg1.Width - oneUnit, Y = textSeg5.Location.Y };
        }

1 Answer, 1 is accepted

Sort by
0
Peter
Telerik team
answered on 04 May 2011, 06:22 PM
Hello Edward Pauley,

We have noticed in the provided code snippet that you had used the Textboxes definition item instead of the processing one. The sender of the event is always the processing counterpart of the item and you can use it to access the report item processing counterpart as shown in the following sample code snippet:

void textSeg5_ItemDataBound(object sender, EventArgs e)
{
    Telerik.Reporting.Processing.TextBox textSeg5Position = (Telerik.Reporting.Processing.TextBox)sender;
    textSeg5Position.Style.BackgroundColor = Color.Purple;
    textSeg5Position.Width = originalTextSeg5Width * (textSeg5Position.Text.Length);
}

Your requirement seems to be close to the one elaborated in the Growing TextBox Issue forum thread. Check out the bindings suggested approach and let us know how it goes.

Kind regards,
Peter
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
Tags
General Discussions
Asked by
Edward Pauley
Top achievements
Rank 1
Answers by
Peter
Telerik team
Share this question
or