Pourquoi il y a plantage sur mon bouton "Dernier" [Résolu]

Signaler
Messages postés
187
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
28 août 2015
-
Messages postés
15160
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 novembre 2020
-
Salut à Tous!

J'ai un "form" avec deux "Textboxs" (txtBoxName et txtBx_datebirth) et quatre bouttons ("Premier", "Rentrer", "Avancer", "Dernier").
Curieusement ma precoccupation se pose sur le bouton "Dernier". Quand j'y clique il me donne ce message "There is no row at position -1".
Tandis que tous les restes des boutons marchent sans problème. J'ai besoin d'un secours.
La ligne coloriée de rouge c'est là ou se pose le problème. Merci!

namespace dataBase1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        System.Data.SqlServerCe.SqlCeConnection con;
        System.Data.SqlServerCe.SqlCeDataAdapter da;
        DataSet ds1;

        int MaxRows = 0;
        int inc = 0;


        private void Form1_Load(object sender, EventArgs e)
        {
            con = new System.Data.SqlServerCe.SqlCeConnection();
            //con.Open();

            ds1 = new DataSet();

            con.ConnectionString = "Data Source=C:\\employees.sdf";
            string sql = "SELECT * From tbl_employees";
            da = new System.Data.SqlServerCe.SqlCeDataAdapter(sql,con);

            da.Fill(ds1, "Israel");
            NavigateRecords();

            //MessageBox.Show("Connection Open");

            //con.Close();

        }

        private void NavigateRecords()
        {
            
           DataRow dRow = ds1.Tables["Israel"].Rows[inc];
            textBox1.Text = dRow.ItemArray.GetValue(1).ToString();
            textBox2.Text = dRow.ItemArray.GetValue(2).ToString();
                    }
        private void btnNext_Click(object sender, EventArgs e)
        {
            if (inc != MaxRows - 1)
            {
                inc++;
                NavigateRecords();
            }
            else
            {
                MessageBox.Show("No more rows");
            }
        }

        private void btnPrevious_Click(object sender, EventArgs e)
        {
            if (inc > 0)
            {
                inc--;
                NavigateRecords();
            }
            else
            {
                MessageBox.Show("First Record");
            }
        }

        private void btnLast_Click(object sender, EventArgs e)
        {
            if (inc != MaxRows - 1)
            {
                inc = MaxRows - 1;
                NavigateRecords();
            }
        }

        private void btnFirst_Click(object sender, EventArgs e)
        {
            if (inc != 0)
            {
                inc = 0;
                NavigateRecords();
            }
        }



Developper est une dimension pour moi.
Leader2000

3 réponses

Messages postés
187
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
28 août 2015

J'ai mis cette line de code et ca marcher:

MaxRows = ds1.Table["Avi"].Rows.Count;

private void Form1_Load(object sender, EventArgs e) 
         {  
             con = new System.Data.SqlServerCe.SqlCeConnection();  
            //con.Open();
             ds1 = new DataSet(); 
             con.ConnectionString = "Data Source=C:\\employees.sdf";  
             string sql = "SELECT * From tbl_employees";  
             da = new System.Data.SqlServerCe.SqlCeDataAdapter(sql,con);  
             da.Fill(ds1, "Israel");  
            NavigateRecords();                              
               //C'est cette line de code ajoutée
               MaxRows = ds1.Table["Avi"].Rows.Count;
             //MessageBox.Show("Connection Open");  
             //con.Close();  
         }



Developper est une dimension pour moi.
Leader2000
Messages postés
15160
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 novembre 2020
464
As tu exécuté ce code en pas à pas
private void btnLast_Click(object sender, EventArgs e)
        {
            if (inc != MaxRows - 1)
            {
                inc = MaxRows - 1;
                NavigateRecords();
            }
        }



Je parie que MaxRows vaut 0, donc que tu envoies inc à l'enregistrement -1.
Whismeril
Messages postés
15160
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 novembre 2020
464
Alors si c'est bon, clique sur réponse acceptée.



Whismeril