简体   繁体   English

StringFormat 不会更改 Silverlight 中的数字<telerik:gridviewdatacolumn></telerik:gridviewdatacolumn>

[英]StringFormat doesnt change number in Silverlight <telerik:GridViewDataColumn>

I want numbers like 123456 becomes like 123,456 .我希望像123456这样的数字变成像123,456 so in here:所以在这里:

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

I added stringformat .我添加了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数字显示为 123456,没有发生任何变化

The format StringFormat='###,###' is not valid syntax for XAML string format.格式StringFormat='###,###'不是 XAML 字符串格式的有效语法。 To have it correctly, you should have an argument passed somewhere ({0..}) .要正确使用它,您应该在某处传递一个参数({0..}) Try the following to have the desired behavior:尝试以下操作以获得所需的行为:

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

You can create a class like this您可以像这样创建一个 class

    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="مبلغ کارشناسي"  />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM