![](/img/trans.png)
[英]Retrieve RadGrid cell value in ItemDataBound - “Input string was not in a correct format.”
[英]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.