2015-04-25 54 views
0

聽起來很簡單,對嗎?我需要格式化一個字符串作爲radgrid winform單元格中的電話號碼

我可以格式化輸入,但我有一個數據庫,作爲字符串返回值。無論我做什麼,如果它以1234567890的形式存儲在數據庫中,我都會返回1234567890。數據庫中的所有內容都存儲爲嚴格字符串數字數據,這意味着沒有字母或特殊字符,但它是一個varchar(10)字段。

我創建了一個GridViewMaskBox列,並將其設置爲數字,然後在格式化事件改變了數據的數字是這樣的:

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; 
      } 

,細胞仍然顯示1234567 89代替(123)456-7890

我試圖創建一個標準文本列,並使用每一個變化: radGridView1.Columns [ 「手機」] 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("###-###-####"); 

仍在工作,但它感覺像是在正確的方向邁出的一步。

+0

我們DisplaText財產不能確定radgrid控件 –

回答

1

舉行!不要殺死沒有動物:)。

首先,我想先解釋一下,CellFormatting事件用於外觀修改,因爲網格爲其單元使用UI虛擬化。所以,設置值不是你應該在那裏做的,但是,設置CellElement.Text是你可能想要的。也就是說,您可以將文本更改爲任何您想要的內容,這是您應該對您的案例進行的操作。

關於Columns的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("(###)-###-####"); 
    } 
} 
在DevExpress的