Principales respuestas
Me aprece un error que no se como solucionar

Pregunta
-
La cuestión es que tengo un problema con mi código el cual lo que hace es guardar los datos de un datagrid en una base de datos en sqlserver el tema es que me guarda la primera parte que es la "id" pero cuando tiene que guardar la parte de "nombre" me da el siguiente error ya intente de todo
database1DataSet1.Alumnos.IdColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Id"); database1DataSet1.Alumnos.NombreColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Nombre"); database1DataSet1.Alumnos.ApellidoColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Apellido"); database1DataSet1.Alumnos.Primera_NotaColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Primera_Nota"); database1DataSet1.Alumnos.Segunda_NotaColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Segunda_Nota"); database1DataSet1.Alumnos.Tercera_NotaColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Tercera_Nota"); database1DataSet1.Alumnos.Promedio_FinalColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Promedio_Final");
Espero puedan ayudarme desde ya muchas gracias jeje
Respuestas
-
No comprendo la lógica de lo que estás haciendo. Es algo que no puede funcionar, no es de extrañar que produzca un error. Fíjate por ejemplo en esta línea:
database1DataSet1.Alumnos.NombreColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Nombre");
Ahí tomas una columna del alumonosDataGridView, definida por su índice, y después preguntas por el nombre de la columna usando .Name. Entonces comparas ese nombre con el texto "Nombre". El resultado de la comparación es el valor booleano false porque esa columna no se llama "Nombre". Entonces le aplicas un Convert.ToString a ese valor booleano y te devuelve la cadena "False". Después le asignas ese texto "False" al nombre de la columna NombreColumn, con lo que cambias el nombre de la columna para que se llame "False". Lógicamente en cuanto haces esto con dos columnas distintas te da un error porque no pueden existir dos columnas que se llamen igual.
Así que algo no es coherente en lo que estás haciendo. ¿Por qué estás manipulando los nombres de las columnas? ¿Qué es lo que intentas conseguir?
Fíjate también que en todas las sentencias de tu código preguntas por la columna número e.ColumnIndex, por lo que todas las filas se refieren a la misma columna del datagridview, que tampoco parece muy razonable: esto lo haces en el Cell_Click por lo que cada vez que haces un click en una celda accedes tomas la columna del gridview y la metes en todas las columnas del datatable. Algo no está bien pensado aquí.
- Propuesto como respuesta Sergio ParraModerator sábado, 22 de junio de 2019 16:35
- Marcado como respuesta Sergio ParraModerator jueves, 13 de febrero de 2020 20:37
-
Hola, para insertar datos debería hacer algo asi
database1DataSet1.Alumnos["NombreColumn"] = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name);
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos
- Propuesto como respuesta Alberto PoblacionMVP, Moderator lunes, 24 de junio de 2019 14:19
- Marcado como respuesta Sergio ParraModerator jueves, 13 de febrero de 2020 20:37
-
Lo primero revisar cuál es la cadena de conexión (ponla aquí en el foro si no sabes interpretarla), no vaya a ser que la base de datos esté en modo "instancia de usuario", en cuyo caso habría que ver si es que el archivo es realmente de solo-lectura (que podría ser porque esté marcado como solo-lectura en el sistema de archivos, pero también puede ser porque esté en una carpeta de solo lectura o porque el usuario solo tenga permiso para leerlo).
Pero si no está en modo instancia de usuario, entonces habría que ver cómo está la base de datos en el servidor. Una captura de pantalla de la base de datos tal como se ve en SSMS nos daría una idea si este es el caso.
- Marcado como respuesta Sergio ParraModerator jueves, 13 de febrero de 2020 20:37
Todas las respuestas
-
No comprendo la lógica de lo que estás haciendo. Es algo que no puede funcionar, no es de extrañar que produzca un error. Fíjate por ejemplo en esta línea:
database1DataSet1.Alumnos.NombreColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Nombre");
Ahí tomas una columna del alumonosDataGridView, definida por su índice, y después preguntas por el nombre de la columna usando .Name. Entonces comparas ese nombre con el texto "Nombre". El resultado de la comparación es el valor booleano false porque esa columna no se llama "Nombre". Entonces le aplicas un Convert.ToString a ese valor booleano y te devuelve la cadena "False". Después le asignas ese texto "False" al nombre de la columna NombreColumn, con lo que cambias el nombre de la columna para que se llame "False". Lógicamente en cuanto haces esto con dos columnas distintas te da un error porque no pueden existir dos columnas que se llamen igual.
Así que algo no es coherente en lo que estás haciendo. ¿Por qué estás manipulando los nombres de las columnas? ¿Qué es lo que intentas conseguir?
Fíjate también que en todas las sentencias de tu código preguntas por la columna número e.ColumnIndex, por lo que todas las filas se refieren a la misma columna del datagridview, que tampoco parece muy razonable: esto lo haces en el Cell_Click por lo que cada vez que haces un click en una celda accedes tomas la columna del gridview y la metes en todas las columnas del datatable. Algo no está bien pensado aquí.
- Propuesto como respuesta Sergio ParraModerator sábado, 22 de junio de 2019 16:35
- Marcado como respuesta Sergio ParraModerator jueves, 13 de febrero de 2020 20:37
-
lo que yo intento hacer es que lo que yo ingreso en el datagrid me lo guarde en la base de datos haciendo click en un boton "Guardar" dentro del datagrid por eso el evento Cell_Click al principio del codigo donde dice:
database1DataSet1.Alumnos.NombreColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Nombre");
intento que en la columna Nombre de la tabla Alumnos me guarde el dato que contiene la celda del datagrid en la coumna Nombre
-
Hola, para insertar datos debería hacer algo asi
database1DataSet1.Alumnos["NombreColumn"] = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name);
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos
- Propuesto como respuesta Alberto PoblacionMVP, Moderator lunes, 24 de junio de 2019 14:19
- Marcado como respuesta Sergio ParraModerator jueves, 13 de febrero de 2020 20:37
-
-
Lo primero revisar cuál es la cadena de conexión (ponla aquí en el foro si no sabes interpretarla), no vaya a ser que la base de datos esté en modo "instancia de usuario", en cuyo caso habría que ver si es que el archivo es realmente de solo-lectura (que podría ser porque esté marcado como solo-lectura en el sistema de archivos, pero también puede ser porque esté en una carpeta de solo lectura o porque el usuario solo tenga permiso para leerlo).
Pero si no está en modo instancia de usuario, entonces habría que ver cómo está la base de datos en el servidor. Una captura de pantalla de la base de datos tal como se ve en SSMS nos daría una idea si este es el caso.
- Marcado como respuesta Sergio ParraModerator jueves, 13 de febrero de 2020 20:37