Visual Basic.NET - insertar columna en datagrid view

   
Vista:

insertar columna en datagrid view

Publicado por Jesús (2 intervenciones) el 29/07/2016 19:17:26
buenas tardes soy nuevo en el foro y en programación, bueno deje la programación desde la uni porque no me gusto.

tengo un problema en una DGV cargo un archivo de excel y necesito insertar una columna, lo hago de la siguiente manera:
- en una caja de texto escribo la columna que quiero agregar y al click en el boton insertar agrega la columna.
mientras escriba el nombre de la columna y esta no este en el DGV no hay ningun problema, pero si pongo el nombre de alguna que ya este siendo usado me marca error de: DuplicateNameException

-quisiera que me orientaran como le puedo hacer, las columnas me las ingresa al final y necesito que las ingrese donde yo le digo y si esta siendo usado que no borre los datos que ahí se encuentran.

les agradezco su atención.

si sirve de algo les dejo el codigo:


Public Class frmLeerExcel

Private Shared HojaExcel As DataTable = Nothing
Private Shared Leyendo As Boolean = False
Private Shared PathExcel As String
Private Shared Fila1AsHeader As Boolean

Private Sub btnSeleccionarExcel_Click(sender As Object, e As EventArgs) Handles btnSeleccionarExcel.Click
Dim SeleccionArchivo As New OpenFileDialog

SeleccionArchivo.Filter = "Hojas Excel 2003|*.xls| Hojas Excel |*.xlsx"

If SeleccionArchivo.ShowDialog = Windows.Forms.DialogResult.OK Then

PathExcel = SeleccionArchivo.FileName
Fila1AsHeader = chkFila1Header.Checked
Dim Tareas As New Threading.Thread(AddressOf LeerExcel)
Tareas.Start()

Me.Enabled = False
Me.Timer1.Enabled = True
Leyendo = True
End If

End Sub

Private Sub LecturaTerminada()
dgvExcel.DataSource = HojaExcel

End Sub

Sub LeerExcel()
HojaExcel = ConvertExcel.convertirExcel2DataTable(PathExcel, Fila1AsHeader)
Leyendo = False
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If Leyendo Then
lblLeyendo.Visible = True
pbLeyendo.Visible = True

pbLeyendo.Maximum = ConvertExcel.TotalRegistro

If ConvertExcel.RegistroActual <= ConvertExcel.TotalRegistro Then
pbLeyendo.Value = ConvertExcel.RegistroActual
End If

Else
Timer1.Enabled = False
lblLeyendo.Visible = False
pbLeyendo.Visible = False
Me.Enabled = True
LecturaTerminada()
End If
End Sub


Private Sub btnGuardarArchivo_Click(sender As Object, e As EventArgs) Handles btnGuardarArchivo.Click
Dim SeleccionArchivo As New SaveFileDialog

If SeleccionArchivo.ShowDialog = Windows.Forms.DialogResult.OK Then
ConvertExcel.ExportToExcelFast(HojaExcel, SeleccionArchivo.FileName, True)
End If

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles insertar.Click
HojaExcel.Columns.Add(columna.Text, GetType(String))
dgvExcel.DataSource = Nothing
dgvExcel.ClearSelection()
dgvExcel.DataSource = HojaExcel

End Sub
End Class
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

insertar columna en datagrid view

Publicado por Miguel (350 intervenciones) el 29/07/2016 22:29:57
Hola,
Un objeto DataTable no puede tener dos columnas con el mismo nombre (título), por eso te genera el error. Antes de agregar una columna al DataTable tienes que ver si ya existe (creo que con dt.Columns.Contains("column") puedes hacer esto). Podrías trabajar esto en un "Do While" agregando alguna letra/número al nombre hasta que no exista ninguna columna con ese valor.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

insertar columna en datagrid view

Publicado por Jesús Hernández (2 intervenciones) el 29/07/2016 22:38:30
si, gracias - leyendo un poco me entere de lo que comentas, no se pueden duplicar los nombres,

ahora lo que quiero hacer entonces es referenciar a la ultima columna y luego moverla hacia donde quiero segun es con la propiedad ordinal pero no tengo la menor idea de como...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar