Joshua Hornby
Joshua Hornby

Reputation: 383

why aren't my buttons working in c# application

I have a form which is linked to a database and the buttons which control the form are not working, I'm not getting any errors just simply nothing is happening.

DisplayRow class

private void DisplayRow(int rowIndex)
    {
        // Check that we can retrieve the given row
        if (myDataTable.Rows.Count == 0)
            return; // nothing to display
        if (rowIndex >= myDataTable.Rows.Count)
            return; // the index is out of range

        // If we get this far then we can retrieve the data
        try
        {
            DataRow row = myDataTable.Rows[rowIndex];
            textBox1.Text = row["FilePath"].ToString();
            textBox2.Text = row["Subject"].ToString();
            textBox3.Text = row["Title"].ToString();
            textBox4.Text = row["Keywords"].ToString();
            textBox5.Text = row["MediaType"].ToString();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error in DisplayRow : \r\n" + ex.Message);
        }

    }

The button which should move on to the next record

private void button1_Click(object sender, EventArgs e)
    {
        if (currentRecord < myDataTable.Rows.Count -1)
        {
            currentRecord++;
            DisplayRow(currentRecord);

        }

But like i say when i run the app nothing happens, no errors just nothing.

EDIT: as asked the coded for MyDataTable

private void Form1_Load(object sender, EventArgs e)
    {
        {
            String command = "SELECT * FROM Media";
            try
            {
                myConnection = new OleDbConnection(access7ConnectionString);
                myAdapter = new OleDbDataAdapter(access7ConnectionString, myConnection);
                myCommandBuilder = new OleDbCommandBuilder(myAdapter);
                myDataTable = new DataTable();
                FillDataTable(command);
                DisplayRow(currentRecord);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

full code what I am running..

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;
using System.Data.OleDb;
namespace MediaPlayer
{
public partial class Media : Form
{

    // Use this connection string if your database has the extension .accdb
    private const String access7ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\MediaDatabase.accdb";
    // Use this connection string if your database has the extension .mdb
    private const String access2003ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\MediaDatabase.mdb";
    // Data components
    private DataTable myDataTable;

    // Index of the current record
    private int currentRecord = 0;

    private void FillDataTable(string selectCommand)
    {
        currentRecord = 0;
        OleDbConnection myConnection = new OleDbConnection(access7ConnectionString);
        OleDbDataAdapter myAdapter = new OleDbDataAdapter(selectCommand, myConnection);
        myDataTable = new DataTable();


        try
        {
            myConnection.Open();
            myAdapter.SelectCommand.CommandText = selectCommand;
            myAdapter.Fill(myDataTable);
            myConnection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error in FillDataTable : \r\n" + ex.Message);
        }
        DisplayRow(currentRecord);

    }

    private void DisplayRow(int rowIndex)
    {
        // Check that we can retrieve the given row
        if (myDataTable.Rows.Count == 0)
            return; // nothing to display
        if (rowIndex >= myDataTable.Rows.Count)
            //resets the index to 0 when you get past the last record
            rowIndex = 0;
        //if rowIndex is less then 0 set it to the last row
        if (rowIndex < 0)
            rowIndex = myDataTable.Rows.Count - 1;


        // If we get this far then we can retrieve the data
        try
        {
            DataRow row = myDataTable.Rows[rowIndex];
            textBox1.Text = row["FilePath"].ToString();
            textBox2.Text = row["Subject"].ToString();
            textBox3.Text = row["Title"].ToString();
            textBox4.Text = row["Keywords"].ToString();
            textBox5.Text = row["MediaType"].ToString();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error in DisplayRow : \r\n" + ex.Message);
        }

    }




    public Media()
    {
        InitializeComponent();
        string command = "SELECT * FROM Media";
        //the try catch is in the FillDataTable method
        FillDataTable(command);
    }




    private void label2_Click(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {
        //assuming this cycles through the data
        currentRecord++;
        DisplayRow(currentRecord);
    }

    private void button6_Click(object sender, EventArgs e)
    {
        //assuming this resets the data
        currentRecord = 0;
        this.DisplayRow(currentRecord);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //assuming this cycles through the data
        currentRecord++;
        DisplayRow(currentRecord);
    }
}

}

Upvotes: 0

Views: 470

Answers (4)

General Grey
General Grey

Reputation: 3698

I added a bunch of MessageBox's to help with debugging, try this and tell me what messages you get?

namespace MediaPlayer
{
public partial class Media : Form
{

    // Use this connection string if your database has the extension .accdb
    private const String access7ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\MediaDatabase.accdb";
    // Use this connection string if your database has the extension .mdb
    private const String access2003ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\MediaDatabase.mdb";
    // Data components
    private DataTable myDataTable;

    // Index of the current record
    private int currentRecord = 0;

    private void FillDataTable(string selectCommand)
    {
        currentRecord = 0;
        OleDbConnection myConnection = new OleDbConnection(access7ConnectionString);
        OleDbDataAdapter myAdapter = new OleDbDataAdapter(selectCommand, myConnection);
        myDataTable = new DataTable();
        try
        {
            myConnection.Open();
            myAdapter.SelectCommand.CommandText = selectCommand;
            myAdapter.Fill(myDataTable);
            myConnection.Close();
            MessageBox.Show("We filled the dataTable");
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error in FillDataTable : \r\n" + ex.Message);
        }
        MessageBox.Show(myDataTable.Rows.Count.ToString());
        DisplayRow(currentRecord);

    }

    private void DisplayRow(int rowIndex)
    {
        // Check that we can retrieve the given row
        if (myDataTable.Rows.Count == 0)
        {
            MessageBox.Show("No rows to Display");
            return; // nothing to display
        }
        if (rowIndex >= myDataTable.Rows.Count)
            //resets the index to 0 when you get past the last record
            rowIndex = 0;
        //if rowIndex is less then 0 set it to the last row
        if (rowIndex < 0)
            rowIndex = myDataTable.Rows.Count - 1;


        // If we get this far then we can retrieve the data
        try
        {
            DataRow row = myDataTable.Rows[rowIndex];
                        textBox1.Text = row["FilePath"].ToString();
                        textBox2.Text = row["Subject"].ToString();
                        textBox3.Text = row["Title"].ToString();
                        textBox4.Text = row["Keywords"].ToString();
                        textBox5.Text = row["MediaType"].ToString();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error in DisplayRow : \r\n" + ex.Message);
        }

    }
    public Media()
    {
        InitializeComponent();
        string command = "SELECT * FROM Media";
        //the try catch is in the FillDataTable method
        FillDataTable(command);
    }


    private void button2_Click(object sender, EventArgs e)
    {
        //assuming this cycles through the data
        currentRecord++;
        DisplayRow(currentRecord);
    }

    private void button6_Click(object sender, EventArgs e)
    {
        //assuming this resets the data
        currentRecord = 0;
        this.DisplayRow(currentRecord);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //assuming this cycles through the data
        currentRecord++;
        DisplayRow(currentRecord);
    }
}

}

Upvotes: 0

General Grey
General Grey

Reputation: 3698

Here you go I wrote the entire thing for you as discussed in another thread. Hope it works.

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;
using System.Data.OleDb;
namespace MediaPlayer
{
public partial class Media : Form
{

// Use this connection string if your database has the extension .accdb
private const String access7ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\MediaDatabase.accdb";
// Use this connection string if your database has the extension .mdb
private const String access2003ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\MediaDatabase.mdb";
// Data components
private DataTable myDataTable;

// Index of the current record
private int currentRecord = 0;

private void FillDataTable(string selectCommand)
{
    currentRecord=0;    
    OleDbConnection myConnection = new OleDbConnection(access7ConnectionString);
    OleDbDataAdapter myAdapter = new OleDbDataAdapter(selectCommand, myConnection);
    myDataTable = new DataTable();


    try
    {
        myConnection.Open();
        myAdapter.SelectCommand.CommandText = selectCommand;
        myAdapter.Fill(myDataTable);
        myConnection.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error in FillDataTable : \r\n" + ex.Message);
    }
    DisplayRow(currentRecord);

}

private void DisplayRow(int rowIndex)
{
    // Check that we can retrieve the given row
    if (myDataTable.Rows.Count == 0)
        return; // nothing to display
    if (rowIndex >= myDataTable.Rows.Count)
        //resets the index to 0 when you get past the last record
        rowIndex=0;
    //if rowIndex is less then 0 set it to the last row
    if (rowIndex<0) 
        rowIndex = myDataTable.Rows.Count-1;


    // If we get this far then we can retrieve the data
    try
    {
        DataRow row = myDataTable.Rows[rowIndex];
        textBox1.Text = row["FilePath"].ToString();
        textBox2.Text = row["Subject"].ToString();
        textBox3.Text = row["Title"].ToString();
        textBox4.Text = row["Keywords"].ToString();
        textBox5.Text = row["MediaType"].ToString();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error in DisplayRow : \r\n" + ex.Message);
    }

}




public Media()
{
    InitializeComponent();
    string command = "SELECT * FROM Media";
    //the try catch is in the FillDataTable method
    FillDataTable(command);
}




private void label2_Click(object sender, EventArgs e)
{

}

private void button2_Click(object sender, EventArgs e)
{
   //assuming this cycles through the data
    currentRecord++;
    DisplayRow(currentRecord);
}

private void button6_Click(object sender, EventArgs e)
{
   //assuming this resets the data
    currentRecord=0;
    this.DisplayRow(currentRecord);
}
}

Upvotes: 0

Deepesh
Deepesh

Reputation: 5614

Place a debugger bookmark on private void DisplayRow(int rowIndex) and see if bookmark get highlighted while debugging the application. if not then check if your loop for calling display row is correct

Upvotes: 1

Adolfo Perez
Adolfo Perez

Reputation: 2874

The problem is your numbering. I assume that your currentRecord starts with 1,2,3, etc if that's the case you need to use

if (currentRecord <= myDataTable.Rows.Count -1) 

That way, when your currentRecord is 1 it will be less OR EQUAL than (totalcount 2 - 1 = 1)

Upvotes: 0

Related Questions