我有2个访问数据库,一个名为revision
,另一个名为revision2
。每个数据库都有一个名为batch
的表。
我有DataGridView
显示第一个数据库中的数据。
我需要在不同数据库中的2个表之间进行比较,以及匹配在DataGridView
中获得绿色。
我使用了该代码,但它只为第一场比赛着色而不是全部,
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\revision.accdb");
OleDbConnection con2 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\revision2.accdb");
OleDbCommand cmd = new OleDbCommand("select * From batch", con);
OleDbCommand cmd2 = new OleDbCommand("select * From batches", con2);
con.Open();
con2.Open();
OleDbDataReader dr = cmd.ExecuteReader();
OleDbDataReader dr2 = cmd2.ExecuteReader();
dr.Read();
dr2.Read();
DataTable dt = new DataTable();
dt.Columns.Add("batch_no");
if (dr["batch_no"].ToString() == dr2["batch_no"].ToString())
{
string num = dr["batch_no"].ToString();
foreach (DataGridViewRow myrow in dataGridView1.Rows)
{
if (Convert.ToString(myrow.Cells[0].Value) == num)
{
myrow.DefaultCellStyle.BackColor = Color.Green;
}
else
{
}
}
con.Close();
con2.Close();
}
}
任何解决方案,以获得所有匹配和颜色的东西吗?或者更好的想法?
答案 0 :(得分:0)
你没有遍历读者(博士),你应该找到与当前网格匹配的值。
无论如何,DataTable和其他读者(dr2)的用途是什么?
快速修改,尚未测试:
if (dr["batch_no"].ToString() == dr2["batch_no"].ToString())
{
while (dr.Read())
{
string num = dr.GetString(dr.GetOrdinal("batch_no")); //dr["batch_no"].ToString();
foreach (DataGridViewRow myrow in dataGridView1.Rows)
{
if (Convert.ToString(myrow.Cells[0].Value) == num)
{
myrow.DefaultCellStyle.BackColor = Color.Green;
}
else
{
}
}
}
con.Close();
con2.Close();
}
答案 1 :(得分:0)
在此示例" tbl2.DefaultView.FindRows"可以提供帮助
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\revision.accdb");
OleDbConnection con2 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\revision2.accdb");
OleDbCommand cmd = new OleDbCommand("select * From batch", con);
OleDbCommand cmd2 = new OleDbCommand("select * From batches", con2);
con.Open();
con2.Open();
OleDbDataReader dr = cmd.ExecuteReader();
OleDbDataReader dr2 = cmd2.ExecuteReader();
DataTable tbl1 = new DataTable();
tbl1.Load(dr);
DataTable tbl2 = new DataTable();
tbl1.Load(dr2);
dataGridView1.DataKeyNames = new string[] { "batch_no" };
dataGridView1.DataSource = tbl1;
dataGridView1.DataBind();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (tbl2.DefaultView.FindRows(dataGridView1.DataKeys[i].Value).Length > 0)
dataGridView1.Rows[i].BackColor = Color.Green;
}