Dar formato especial a celdas de un DataGrid en Visual Basic

fossie
25 de Enero del 2006
Hola amigos, espero que alguien me pueda ayudar sobre eso.
Cuando muestro una cadena de texto (string) en una columna de un grid (DataGridTextBoxColumn) no se como aplicarle un formato determinado. Se que usando Format puedo dar formato pero solo lo aplica correctamente si es un número y en mi caso quiero formatear una cadena de texto.
Me gustaria que si el texto de la cadena tiene x caracteres (por ejemplo 6 caracteres) se formatease de una forma y si tiene y caracteres (por ejemplo 10 caracteres) se formatease de otra.
Es decir, si en la columna aparecen los valores 123456 (un string) que el formato aplicado sea 1-234-56 y si el valor de la columna es 1234567890 (un string) que el formato sea 12-345-6789-0
Si la cadena no tiene ni 6 ni 10 caracteres de tamaño se mostrará tal cual, sin formato.

Las columnas tienen la propiedad Format pero no se como indicarle que aplique un formato y otro dependiendo de lo explicado anteriormente.
He leido que seria posible hacerlo creando un tipo de datos que implemente la interface IFormateable pero y he conseguido crearla pero no se como indicarle al grid que la utilice para mostrar la celda.

Esta es la clase que he creado ¿como indicarle al DataGrid que la utilice para formatear una celda?
Si hago
Dim formatoCuentas As New CuentasFormatInfo
Dim c As String = "1234567890"
MsgBox(String.Format(formatoCuentas, "{0}", c))
funciona correctamente.

Gracias por todo.



Public Class CuentasFormatInfo : Implements IFormatProvider, ICustomFormatter
Public Function GetFormat(ByVal formatString As Type) As Object Implements IFormatProvider.GetFormat
If formatString.ToString = GetType(ICustomFormatter).ToString() Then
GetFormat = Me
Else
GetFormat = Nothing
End If
End Function
Public Function Format(ByVal formatString As String, ByVal arg As Object, ByVal provider As IFormatProvider) As String Implements ICustomFormatter.Format
Return FormatoEspecial(arg.ToString, formatString)
End Function
Private Function FormatoEspecial(ByVal cadena As String, ByVal formato As String) As String
Dim cCuenta As String = cadena
If cCuenta.Length = 12 Then
Return Mid(cCuenta, 1, 2) & "-" & Mid(cCuenta, 3, 3) & "-" & Mid(cCuenta, 6, 6) & "-" & Mid(cCuenta, 12, 1)
Else
If cCuenta.Length = 14 Then
Return Mid(cCuenta, 1, 4) & "-" & Mid(cCuenta, 5, 2) & "-" & Mid(cCuenta, 7, 7) & "-" & Mid(cCuenta, 14, 1)
Else
Return cCuenta
End If
End If

Return cCuenta
End Function
End Class

Athrarn
25 de Enero del 2006
this.dataGridTextBoxColPeso.FormatInfo = new CuentasFormatInfo ();