繁体   English   中英

我需要在radgrid winform单元格中将字符串格式设置为电话号码

[英]I need to format a string as a phone number in a radgrid winform cell

听起来很傻,对吧?

我可以格式化输入,但是我有一个数据库,该数据库以字符串形式返回值。 不管我如何将其存储为1234567890,我都会得到1234567890。 数据库中的所有内容均存储为严格的字符串数字数据,这意味着没有字母或特殊字符,但这是一个varchar(10)字段。

我创建了一个GridViewMaskBox列并将其设置为Numeric,然后在格式化事件中将数据更改为数值,如下所示:

GridViewMaskBoxColumn maskBoxColumn = new GridViewMaskBoxColumn();
        maskBoxColumn.Name = "Phone";
        maskBoxColumn.FieldName = "cellphone_number";
        maskBoxColumn.HeaderText = "Phone";
        maskBoxColumn.MaskType = MaskType.Numeric;
        maskBoxColumn.Mask = "(000) 000-0000";
        maskBoxColumn.TextAlignment = ContentAlignment.MiddleCenter;
        maskBoxColumn.ReadOnly = false;
        radGridView1.MasterTemplate.Columns.Add(maskBoxColumn);

然后在CellFormatting事件中:

  if (e.Column.Name=="cellPhone")
            {
                long cellInfo =Convert.ToInt64(e.CellElement.Value);
                 e.CellElement.Value = cellInfo;
            }

我什至只是出于测试目的而尝试:

      if (e.Column.Name=="cellPhone")
            {
                long cellInfo =Convert.ToInt64(e.CellElement.Value);
                long number = 1234567890;
                 e.CellElement.Value = number;
            }

并且该单元格仍显示123456789而不是(123)456-7890

我尝试创建标准文本列,并使用以下所有变体:radGridView1.Columns [“ cellPhone”]。FormatString =“ {0:(###)###-####}”; 然后在格式化事件中再次从字符串更改为int64。 我已经在调试器中验证了它确实在触发事件并正确更改了数据类型。

我准备做出一些小的动物牺牲,但担心这实际上并没有帮助,并且可能会阻碍我积累的任何业力。 请帮忙。 我已经花了几个小时在应该怎么玩的游戏上。

更新:我可以执行以下似乎有效的操作,但实际上将网格中的文本替换为数字中的“()”,从而使数据库在编辑时更新:

 if (e.CellElement.Value.ToString().Length==10)
                {
                    BigInteger bi = new BigInteger();
                       bool worked = BigInteger.TryParse(e.CellElement.Value.ToString(),out bi);
                       string numberAsText = bi.ToString("###-###-####");
                       e.CellElement.Value = numberAsText.ToString();}

我想我正在追尾巴...

更新:我现在添加了一个新的(非数据绑定)列,称为cellMasked,在CellFormating事件中,对于数据绑定手机列,我具有以下单个代码行:

 e.Row.Cells["cellMasked"].Value = Convert.ToUInt64(e.CellElement.Value).ToString("###-###-####");

仍在努力,但感觉就像朝着正确方向迈出了一步。

保持! 不要杀死任何动物:)。

首先,我首先要解释一下CellFormatting事件用于外观修改,因为网格对其单元格使用了UI虚拟化。 因此,设置“值”不是您应该执行的操作,但是,设置CellElement.Text是您可能需要的。 即,您可以将文本更改为所需的任何内容,这是您应做的情况。

关于列的Mask和MaskType属性,它们负责单元格的编辑器(当您打开它进行编辑时)。

这是我为您准备的一个小例子:

 protected override void OnLoad(EventArgs e)
 {
     base.OnLoad(e);

     AddGrid();

     DataTable table = new DataTable();
     table.Columns.Add("cellphone_number");
     table.Rows.Add("1234567890");
     table.Rows.Add("3214567890");
     table.Rows.Add("9874567890");

     radGridView1.AutoGenerateColumns = false;
     radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
     radGridView1.DataSource = table;

     GridViewMaskBoxColumn maskBoxColumn = new GridViewMaskBoxColumn();
     maskBoxColumn.Name = "Phone";
     maskBoxColumn.FieldName = "cellphone_number";
     maskBoxColumn.HeaderText = "Phone";
     maskBoxColumn.MaskType = MaskType.Standard;
     maskBoxColumn.Mask = "(999) 000-0000";
     radGridView1.MasterTemplate.Columns.Add(maskBoxColumn);
     radGridView1.CellFormatting += radGridView1_CellFormatting;
 }

 void radGridView1_CellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e)
 {
     if (e.Column.Name == "Phone")
     {
         e.CellElement.Text = Convert.ToUInt64(e.CellElement.Value).ToString("(###)-###-####");
     }
 }

暂无
暂无

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

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