如何检查数据表列名?

时间:2017-11-19 08:59:29

标签: c#

我有此错误消息: 找不到列[Nom complet]

我的datagridviewbinded的Access数据库,我有不同的表格。 从Sauvegarde表格我选择了一些列,并希望使用combobox列中的[Nom complet]进行搜索过滤,但我收到以下消息: 找不到列[Nom complet]。 我不知道问题出在哪里。 这是代码:

DataTable table = new DataTable();
public recherche()
{
    InitializeComponent();
}
private void filldata()
{
    OleDbConnection ccn = new         
    OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data 
Source='C:\mysource.accdb'");
    string qur = "Select [N], [Code machine], [Type programme], [Nom 
complet], [Motif], [Remarque] From [Sauvegarde]";
    OleDbCommand ccmd = new OleDbCommand(qur, ccn);
    DataTable table = new DataTable();
    OleDbDataAdapter da = new OleDbDataAdapter(ccmd);
    da.Fill(table);
    dataGridView1.DataSource = table;
}
private void recherche_Load(object sender, EventArgs e)
{
    filldata();
} 
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{

    DataView dv = new DataView(table);

    if (comboBox2.SelectedItem.ToString()=="All")
    {
        dataGridView1.DataSource = table;
    }
   else
   {
       dv.RowFilter = string.Format("[Nom complet] LIKE '%{0}%'", 
comboBox2.SelectedItem.ToString());
       dataGridView1.DataSource = dv;

    } 
} 

1 个答案:

答案 0 :(得分:0)

现在更清楚了。您的问题是由于您从未初始化全局变量 table 而是创建本地变量。然后,当您尝试过滤全局变量时,您永远找不到列

DataTable table = new DataTable();
....
private void filldata()
{
    .....
    // This creates a local DataTable variable with the same name of the global one
    // You are hiding the global and using the local one
    // DataTable table = new DataTable();

    // here instead you use the global variable
    // So you are referencing the same variable in the SelectedIndexChanged handler
    table = new DataTable();
    ....
}