No se pueden insertar registros en la tabla desde Gridview – formulario de Windows

Estoy tratando de insertar nuevos registros en la tabla de origen desde la vista de cuadrícula de la interfaz C # … Pero cuando recupero los registros con el código de clic de botón que se muestra a continuación … Estoy obteniendo registros en la vista de cuadrícula pero no hay opción para insertar nuevos registros (Captura de pantalla adjunta) .. donde como puedo actualizar los registros de la vista de cuadrícula.

¿Hay alguna opción o propiedad para habilitar la opción de inserción en la vista de cuadrícula?

Buttonclickcode:

private void RetrieveRules_button_Click(object sender, EventArgs e) { this.dataGridView.DataSource = null; this.dataGridView.Rows.Clear(); SqlCommand cmd1 = con.CreateCommand(); cmd1.CommandType = CommandType.Text; cmd1.CommandText = @" Select TOP 1 * FROM " + schemaName + "[ERSBusinessLogic] ORDER BY ERSBusinessLogic_ID DESC"; con.Open(); cmd1.ExecuteNonQuery(); DataTable dt = new DataTable(); SqlDataAdapter DA = new SqlDataAdapter(cmd1); DA.Fill(dt); dataGridView.DataSource = dt; con.Close(); } 

Captura de pantalla de la vista de cuadrícula donde no hay opción de inserción Gracias

Operaciones de CRUD utilizando DataGridView, DataTable y TableAdapter

Para permitir que el usuario agregue, elimine o edite filas con DataGridView :

  1. Establezca la propiedad AllowUserToAddRows como verdadera o en Tareas de DataGridView , marque Habilitar la adición
  2. Establezca la propiedad AllowUserToDeleteRows en verdadero o en Tareas de DataGridView , marque Habilitar eliminación
  3. Establezca la propiedad ReadOnly en false o en tareas de DataGridView , marque Habilitar edición

Para permitir que el usuario guarde los cambios usando un SqlDataAdapter:

  1. Cree un SqlDataAdapter usando una instrucción select y una cadena de conexión.
  2. Debería tener InsertCommand , DeleteCommand y UpdateCommand para su adaptador de datos. Crea comandos válidos usando un SqlCommandBuilder .
  3. Cargue los datos en una DataTable utilizando el adaptador de datos.
  4. Establecer la tabla de datos como DataSource de DataGridView
  5. Guarde los cambios cuando necesite usar SqlDataAdapter.Update pasando la tabla de datos al método.

Código

 DataTable table; SqlDataAdapter adapter; private void Form1_Load(object sender, EventArgs e) { //Create adapter var connection = @"your connection string"; var command = "SELECT * FROM Table1"; adapter = new SqlDataAdapter(command, connection); //Create Insert, Update and Delete commands var builder = new SqlCommandBuilder(adapter); //Load data table = new DataTable(); adapter.Fill(table); //Bind the grid to data this.dataGridView1.DataSource = table; //Enable add, delete and edit this.dataGridView1.AllowUserToAddRows = true; this.dataGridView1.AllowUserToDeleteRows = true; this.dataGridView1.ReadOnly = false; } private void saveButton_Click(object sender, EventArgs e) { //Save Data adapter.Update(table); } 

Nota

  • No necesitas ese ExecuteNonQuery . Solo necesita una cadena de conexión y un texto de comando. Entonces puedes crear un adaptador de datos. Entonces ni siquiera necesita administrar la apertura y el cierre de la conexión, el adaptador de datos lo administra.
  • Cuando carga datos con SELECT TOP 1 * , si agrega datos y los guarda, no podrá ver las actualizaciones la próxima vez que cargue los datos porque solo carga un solo registro.

El código utiliza ExecuteNonQuery , no devuelve ninguna de las filas afectadas ni los resultados que devuelve su consulta.

Use ExecuteReader lugar.

 var reader = cmd1.ExecuteReader(); DataTable dt = new DataTable(); dtLoad(reader); 

¿Hay alguna opción o propiedad para habilitar la opción de inserción en gridview

 dataGridView1.ReadOnly = false; dataGridView1.EditMode = DataGridViewEditMode.EditOnF2; //if you want to edit on F2.