当我将 DataGridView 完全置于“自动驾驶”状态时,我无法在 Visual Studio 2010 中的 C# 下重新创建该问题。也就是说,我将 DataGridView 拖放到表单上并添加了以下代码(全部):
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 WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
using (var con = new OleDbConnection())
{
con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Public\Database1.accdb;";
con.Open();
using (var cmd = new OleDbCommand())
{
cmd.Connection = con;
cmd.CommandText =
"SELECT * FROM Free_Cash_Flow AS C";
OleDbDataReader rdr = cmd.ExecuteReader();
var da = new DataTable();
da.Load(rdr);
dataGridView1.DataSource = da;
rdr.Close();
}
con.Close();
}
}
}
}
当我跑的时候,我得到了以下
然后我将查询更改为
cmd.CommandText =
"SELECT * " +
"FROM Free_Cash_Flow AS C " +
"INNER JOIN Quarterly_Growth_Rates AS G ON (C.Ticker = G.Ticker)";
当我再次运行代码时,我得到了
请注意,“Free_Cash_Flow”不为空。
另请注意,这些列的显示顺序与屏幕截图中的顺序不同。这表明可能对您的 DataGridView 进行了一些额外的调整(例如,重新排序列),这些调整可能已将列显式绑定到特定的字段名称或别名。
您应该仔细检查 DataGridView 的属性,以确保它们与修改后的查询(使用 INNER JOIN)提供的匹配。显然 [Free_Cash_Flow] 既是查询名称又是字段名称的事实本身并不是问题。