我有一个链接到数据库的表单,控制表单的按钮不起作用,我没有收到任何错误,只是没有发生任何事情。
DisplayRow类
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);
}
}
应该移动到下一条记录的按钮
private void button1_Click(object sender, EventArgs e)
{
if (currentRecord < myDataTable.Rows.Count -1)
{
currentRecord++;
DisplayRow(currentRecord);
}
但就像我说当我运行应用程序时没有任何反应,没有任何错误。
编辑:按照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);
}
}
我正在运行的完整代码..
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);
}
}
}
答案 0 :(得分:1)
在private void DisplayRow(int rowIndex)
上放置一个调试器书签,看看在调试应用程序时是否突出显示书签。如果没有,那么检查你的调用显示行的循环是否正确
答案 1 :(得分:0)
问题在于你的编号。我假设你的currentRecord以1,2,3等开头,如果你需要使用
的情况if (currentRecord <= myDataTable.Rows.Count -1)
这样,当你的currentRecord为1时,它将比((totalcount 2 - 1 = 1)更少OR EQUAL
答案 2 :(得分:0)
在这里,我按照另一个话题中的讨论为你写了整篇文章。希望它有效。
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);
}
}
答案 3 :(得分:0)
我添加了一堆MessageBox来帮助调试,尝试这个并告诉我你收到了什么消息?
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);
}
}
}