Reputation: 383
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
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
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
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
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