I added s" /> I added s" /> I added s"/>

StringFormat doesnt change number in Silverlight <telerik:GridViewDataColumn>

44 Views Asked by At

I want numbers like 123456 becomes like 123,456. so in here:

<telerik:GridViewDataColumn DataMemberBinding="{Binding value}" Header="sth" />

I added stringformat. None of below didn't work out:

<telerik:GridViewDataColumn DataMemberBinding="{Binding value, StringFormat=\{0:N2\}}" Header="sth" />

<telerik:GridViewDataColumn DataMemberBinding="{Binding value, StringFormat='{}{0:N0}'}" Header="sth" />

<telerik:GridViewDataColumn DataMemberBinding="{Binding value, StringFormat='###,###'}" Header="sth" />

<telerik:GridViewDataColumn DataMemberBinding="{Binding value, StringFormat=\{0:N0\}" Header="sth" />

                                             <telerik:GridViewDataColumn DataMemberBinding="{Binding Value,StringFormat=\{0:N\}}" "sth" DataFormatString="{}{0:N0}"/>

number shows up like 123456, no changes happening

2

There are 2 best solutions below

0
zaphod-ii On

The format StringFormat='###,###' is not valid syntax for XAML string format. To have it correctly, you should have an argument passed somewhere ({0..}). Try the following to have the desired behavior:

<telerik:GridViewDataColumn DataMemberBinding="{Binding Item, StringFormat={}{0:###,0}}" />
0
Omid Jamali On

You can create a class like this:

public class SFMoneyColumn : GridViewBoundColumnBase
{
    public override FrameworkElement CreateCellEditElement(GridViewCell cell, object dataItem)
    {
        var cellEditElement = new SFMoney();
        // cellEditElement.Mask = Mask;
        //    cellEditElement.EmptyContent = EmptyContent;
        //    cellEditElement.SelectedDateFormat = DatePickerFormat.Short;
        //  cellEditElement.SelectedDateChanged += new EventHandler<System.Windows.Controls.SelectionChangedEventArgs>(cellEditElement_SelectedDateChanged);
        //  this.BindingTarget = DatePicker.SelectedDateProperty;

        
        Binding valueBinding = this.CreateValueBinding(false);

        cellEditElement.SetBinding(SFMoney.ValueProperty, valueBinding);

        return cellEditElement as FrameworkElement;
    }

    public override FrameworkElement CreateCellElement(GridViewCell cell, object dataItem)
    {


        var cellElement = new Telerik.Windows.Controls.Label();
        //var cellElement = new SFMoney();
        //  cellElement.IsReadOnly = true;
        Binding valueBinding = this.CreateValueBinding(true);
        valueBinding.Mode = BindingMode.OneWay;
        //  cellElement.SetBinding(SFMoney.ValueProperty, valueBinding);
        cellElement.SetBinding(Telerik.Windows.Controls.Label.ContentProperty, valueBinding);

        return cellElement;
    }

    private Binding CreateValueBinding(bool converter)
    {
        Binding valueBinding = new Binding();

        valueBinding.Mode = BindingMode.TwoWay;
        valueBinding.NotifyOnValidationError = true;
        valueBinding.ValidatesOnExceptions = true;
        if (converter)
            valueBinding.Converter = new SFMoneyConverter();
        // valueBinding.UpdateSourceTrigger = UpdateSourceTrigger.Default;
        valueBinding.Path = new PropertyPath(this.DataMemberBinding.Path.Path);
        

        return valueBinding;
    }
    public string DataMemberPath { set; get; }
  //  public SFColumn SFColumn { set; get; }


}

public class SFMoneyConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
        {
            string ashar = "";
            string val = value.ToString();
            if (val.Contains("."))
            {

                ashar = val.Substring(val.IndexOf("."), val.Length - val.LastIndexOf("."));
                value = Math.Floor(System.Convert.ToDouble(value));
            }
            string str = String.Format("{0:0,0}", value) + ashar;



            //  string str = String.Format("{0:0,0}", value);
            if (str.StartsWith("0"))
                str = str.Remove(0, 1);
            return str;
        }
        else
            return "";
        //   return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        //return (value as EnumComboItem).SelectedItem;
        return null;
    }
}

And then use it in your Grid

<sfx:SFMoneyColumn  DataMemberBinding="{Binding Price}" UniqueName="Price"  Header="مبلغ کارشناسي"  />