Pourquoi il y a plantage sur mon bouton "Dernier"

Résolu
Leader2000
Messages postés
187
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
28 août 2015
- 13 févr. 2013 à 11:30
Whismeril
Messages postés
17654
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
13 août 2022
- 13 févr. 2013 à 16:26
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

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

13 févr. 2013 à 14:45
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
3
Whismeril
Messages postés
17654
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
13 août 2022
612
13 févr. 2013 à 11:39
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
0
Whismeril
Messages postés
17654
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
13 août 2022
612
13 févr. 2013 à 16:26
Alors si c'est bon, clique sur réponse acceptée.



Whismeril
0