Hilo Oficial C# Resolviendo y creando nuevas dudas

Hola compis, ya hace un milenio que no posteo nada, y es hora de empezar de nuevo. He hecho grandes amistades en el EOL, algunas se quedaron en el tiempo, otras siguen vivas a dia de hoy.

El motivo de este hilo, es resolver dudas, o plantear nuevos retos para que sean resueltos. En mi caso, hace relavitamente poco que me estoy poniendo en C#, he desarrollado en JAVA y en C++, y encuentro que C# es un buen lenguaje de programación para el desarrollo de aplicaciones de una forma rapida y sencilla.

Bueno el punto es que mi gran talón de aquiles, tanto en java como en C# son las bases de datos. He intentado usar los origenes de datos, que te da visual studio, pero me encuentro con el problema que casi todo te lo muestra en un datagrid. El punto es que yo quiero modificar los datos de una línea de una tabla, que ahora estan vacios, para rellenarlos con los datos del usuario. Para ello uso unas textbox y dos botones.

Al iniciar el Form, las textbox se muestran en ENABLE = FALSE; cuando le damos al botón EDITAR, el valor pasa a ser TRUE. Una vez modificado los valores de las textbox, le dariamos al botón GUARDAR, el cual agarra los datos de las textbox y los traslada a la base de datos, y una vez terminada la transacción, vuelve a poner las textbox en ENABLE = FALSE.

Mi problema es que con la herramienta que da Visual Studio de origenes de datos, no se como hacer que los valores pasen de las textbox a la base de datos. He provado ha hacer conexiones manuales, pero la verdad no he encontrado ningun tutorial de access 2007 y c# que me ayude a disipar las dudas.

Aquí va el software que utilizo:

Visual Studio 2012 para C#
Access 2007 para la base de datos, con extensión mdb.

Un saludo a todos y que no decaiga el hilo.
Pues yo utilicé bases de datos con C# en mi prooyecto de fin de carrera pero yo use sql server, y me fue muy bien. Acces no se como funcionará y de hecho nunca me ha gustado así que ni me lo planteo, pero luego si quieres te miro lo que yo hice a ver si te sirve, que fue hace 2 años y ya casi ni me acuerdo. xD
te entiendo litos, la cosa no es limitarme a access, sinó empezar por access, ya que las bases de datos se puede mover de forma fácil. Mi objetivo es que esa base de datos se guarde en un sistema en la nube como dropbox, y el usuario pueda acceder a ella desde cualquier ordenador, a medida que vaya progresando el proyecto, tener usuarios definidos dentro del programa para que accedas a funciones concretas de la base de datos.

Mi objetivo principal, es manejar algo sencillo y que poco a poco se vaya haciendo mas grande.
A ver si alguien me hace un favor y me explica pq cuando navego por los registros, cuando me paso un registro me da un error de IndexOutOfRange

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace detenciones
{
    public partial class detenidoForm : Form
    {
        int maxrow = 1;
        int inc =1;
       
       
        public detenidoForm()
        {
            InitializeComponent();
           

        }

        private void detenidosBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.detenidosBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.detencionesDataSet);

        }

        private void detenidoForm_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'detencionesDataSet.detenidos' Puede moverla o quitarla según sea necesario.
            this.detenidosTableAdapter.Fill(this.detencionesDataSet.detenidos);

        }

        private void bt_edit_Click(object sender, EventArgs e)
        {
            id_FichaTextBox.Enabled = true;
            nombreTextBox.Enabled = true;
            primer_ApellidoTextBox.Enabled = true;
            segundo_ApellidoTextBox.Enabled = true;
            fecha_NacimientoTextBox.Enabled = true;
        }

        private void btn_nuevo_Click(object sender, EventArgs e)
        {
            id_FichaTextBox.Enabled = true;
            nombreTextBox.Enabled = true;
            primer_ApellidoTextBox.Enabled = true;
            segundo_ApellidoTextBox.Enabled = true;
            fecha_NacimientoTextBox.Enabled = true;

            id_detenidoTextBox.Text = "";
            id_FichaTextBox.Text = "";
            nombreTextBox.Text = "";
            primer_ApellidoTextBox.Text = "";
            segundo_ApellidoTextBox.Text = "";
            fecha_NacimientoTextBox.Text = "";

           
        }

        private void bt_aceptar_Click(object sender, EventArgs e)
        {
       
                detencionesDataSet.detenidosRow nuevo_detenido = detencionesDataSet.detenidos.NewdetenidosRow();
                int newnumber = Convert.ToInt32(nuevo_detenido.ItemArray.GetValue(0));
               
               
                newnumber = newnumber + 1;
                DataRow newdetenido = detencionesDataSet.detenidos.Rows[maxrow -1];
                nuevo_detenido[0] = newnumber;
                nuevo_detenido[1] = Convert.ToInt32(id_FichaTextBox.Text);
                nuevo_detenido[2] = nombreTextBox.Text;
                nuevo_detenido[3] = primer_ApellidoTextBox.Text;
                nuevo_detenido[4] = segundo_ApellidoTextBox.Text;
                nuevo_detenido[5] = Convert.ToDateTime(fecha_NacimientoTextBox.Text);

                //detencionesDataSet.detenidos.NewdetenidosRow(nuevo_detenido);

                detencionesDataSet.detenidos.Rows.Add(nuevo_detenido);
                detenidosTableAdapter.Update(detencionesDataSet.detenidos);

                maxrow = maxrow + 1;
                inc = maxrow - 1;
               

                MessageBox.Show("entrada hecha");

        }

        //Navegador de Registros, desde aquí se navega por los registros.
        //Problema de IndexOutOfRangeException

        public void Navigaterecords(Int32 pos)
        {
            try
           {
               
                DataRow drow = detencionesDataSet.detenidos.Rows[pos];
               
                id_detenidoTextBox.Text = drow.ItemArray.GetValue(0).ToString();
                id_FichaTextBox.Text = drow.ItemArray.GetValue(1).ToString();
                nombreTextBox.Text = drow.ItemArray.GetValue(2).ToString();
                primer_ApellidoTextBox.Text = drow.ItemArray.GetValue(3).ToString();
                segundo_ApellidoTextBox.Text = drow.ItemArray.GetValue(4).ToString();
                fecha_NacimientoTextBox.Text = drow.ItemArray.GetValue(5).ToString();
               
                inc = pos;
            }
            catch (IndexOutOfRangeException ex) {

                MessageBox.Show("error" + ex);
               
            }
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (inc > 0)
            {

                Navigaterecords(inc);
                inc--;
                //return;
            }
            else {
                MessageBox.Show("No hay mas registros");
            }
           
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (inc != maxrow - 1)
            {

                Navigaterecords(inc);
                inc++;
                //return;
            }
            else {
              MessageBox.Show("No hay mas registros");
            }
           

        }

    }

3 respuestas