public override void ViewDidLoad ()
		{
			base.ViewDidLoad ();
			this.flexGrid.IsReadOnly = true;
			this.flexGrid.ItemsSource = Customer.GetCustomerList(100);
			this.flexGrid.ColumnHeaderFont = UIFont.BoldSystemFontOfSize (this.flexGrid.Font.PointSize);

			this.flexGrid.FormatItem += (Xuni.iOS.FlexGrid.FlexGrid sender, Xuni.iOS.FlexGrid.GridPanel panel, Xuni.iOS.FlexGrid.GridCellRange range, CoreGraphics.CGContext context) => {
				
				if(panel == sender.Cells)
				{
					if(this.searchText.Text == null || this.searchText.Text.Length == 0 || (sender.EditRange!=null && sender.EditRange.Intersects(range))) return false;

					NSError error = null;
					NSRegularExpression regex = new NSRegularExpression(new NSString(this.searchText.Text), NSRegularExpressionOptions.CaseInsensitive, out error);

					NSString data = new NSString(panel.GetCellData(range.Row, range.Col, true).ToString());


					if(error == null)
					{
						NSMutableAttributedString attributedString = new NSMutableAttributedString(data);

						regex.EnumerateMatches(data, 0, new NSRange(0, data.Length), (NSTextCheckingResult result, NSMatchingFlags flags, ref bool stop) => 
							{
								NSRange thisrange = result.Range;
								UIStringAttributes stringAttributes = new UIStringAttributes();
								stringAttributes.Font = UIFont.BoldSystemFontOfSize(this.flexGrid.Font.PointSize);
								stringAttributes.ForegroundColor = UIColor.Red;
								attributedString.SetAttributes(stringAttributes, thisrange);
							}
						);

						CoreGraphics.CGRect t = panel.GetCellRect(range.Row, range.Col);
						CoreGraphics.CGSize sz = attributedString.Size;
						UITextAlignment align = this.flexGrid.Columns[range.Col].HorizontalAlignment;

						if (align == UITextAlignment.Right) {
							nfloat mod = t.Size.Width - sz.Width - 4;
							if (mod < 4) mod = 4;
							t.Location = new CoreGraphics.CGPoint(t.Location.X + mod, t.Location.Y);
						} else if (align == UITextAlignment.Center) {
							nfloat mod = (t.Size.Width - sz.Width) / 2;
							if (mod < 4) mod = 4;
							t.Location = new CoreGraphics.CGPoint(t.Location.X + mod, t.Location.Y);
						} else {
							t.Location = new CoreGraphics.CGPoint(t.Location.X + 4, t.Location.Y);
						}

						nfloat mrg = (t.Size.Height - sz.Height) / 2;
						if (mrg < 4) mrg = 4;

						t.Location = new CoreGraphics.CGPoint(t.Location.X,t.Location.Y + mrg);

						attributedString.DrawString(t);

						return true;
					}
				}

				return false;
			};
		}
Esempio n. 2
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            this.flexGrid.IsReadOnly       = true;
            this.flexGrid.ItemsSource      = Customer.GetCustomerList(100);
            this.flexGrid.ColumnHeaderFont = UIFont.BoldSystemFontOfSize(this.flexGrid.Font.PointSize);

            this.flexGrid.FormatItem += (Xuni.iOS.FlexGrid.FlexGrid sender, Xuni.iOS.FlexGrid.GridPanel panel, Xuni.iOS.FlexGrid.GridCellRange range, CoreGraphics.CGContext context) => {
                if (panel == sender.Cells)
                {
                    if (this.searchText.Text == null || this.searchText.Text.Length == 0 || (sender.EditRange != null && sender.EditRange.Intersects(range)))
                    {
                        return(false);
                    }

                    NSError             error = null;
                    NSRegularExpression regex = new NSRegularExpression(new NSString(this.searchText.Text), NSRegularExpressionOptions.CaseInsensitive, out error);

                    NSString data = new NSString(panel.GetCellData(range.Row, range.Col, true).ToString());


                    if (error == null)
                    {
                        NSMutableAttributedString attributedString = new NSMutableAttributedString(data);

                        regex.EnumerateMatches(data, 0, new NSRange(0, data.Length), (NSTextCheckingResult result, NSMatchingFlags flags, ref bool stop) =>
                        {
                            NSRange thisrange = result.Range;
                            UIStringAttributes stringAttributes = new UIStringAttributes();
                            stringAttributes.Font            = UIFont.BoldSystemFontOfSize(this.flexGrid.Font.PointSize);
                            stringAttributes.ForegroundColor = UIColor.Red;
                            attributedString.SetAttributes(stringAttributes, thisrange);
                        }
                                               );

                        CoreGraphics.CGRect t     = panel.GetCellRect(range.Row, range.Col);
                        CoreGraphics.CGSize sz    = attributedString.Size;
                        UITextAlignment     align = this.flexGrid.Columns[range.Col].HorizontalAlignment;

                        if (align == UITextAlignment.Right)
                        {
                            nfloat mod = t.Size.Width - sz.Width - 4;
                            if (mod < 4)
                            {
                                mod = 4;
                            }
                            t.Location = new CoreGraphics.CGPoint(t.Location.X + mod, t.Location.Y);
                        }
                        else if (align == UITextAlignment.Center)
                        {
                            nfloat mod = (t.Size.Width - sz.Width) / 2;
                            if (mod < 4)
                            {
                                mod = 4;
                            }
                            t.Location = new CoreGraphics.CGPoint(t.Location.X + mod, t.Location.Y);
                        }
                        else
                        {
                            t.Location = new CoreGraphics.CGPoint(t.Location.X + 4, t.Location.Y);
                        }

                        nfloat mrg = (t.Size.Height - sz.Height) / 2;
                        if (mrg < 4)
                        {
                            mrg = 4;
                        }

                        t.Location = new CoreGraphics.CGPoint(t.Location.X, t.Location.Y + mrg);

                        attributedString.DrawString(t);

                        return(true);
                    }
                }

                return(false);
            };
        }