如何使用过滤器从 C# 中的访问中选择特定字段

Posted

技术标签:

【中文标题】如何使用过滤器从 C# 中的访问中选择特定字段【英文标题】:how to select specific field using a filter from access in C# 【发布时间】:2016-04-05 09:18:11 【问题描述】:

在 C# 和 windows 窗体中,

我有一个这样的数据库:

这就是我使用类将其数据放入datagridview的方式:

    class DBConnection

    public static void GetList(Form2 frm2)
    
        string DBPath = Application.StartupPath;
        OleDbConnection Connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+DBPath+@"\DataBase\SampleFeeds.accdb");
        OleDbDataAdapter DataA = new OleDbDataAdapter("Select * from FeedLibrary", Connection);
        DataTable Dtable = new DataTable();
        DataA.Fill(Dtable);
        frm2.SelectedFeeddataGridView.DataSource = Dtable;
    


这是我的表单加载:

private void Form2_Load(object sender, EventArgs e)
    
        DBConnection.GetList(this);
    

到目前为止一切正常。

现在我有一个问题:

例如我有一个列表框FeedSelectListBox, 我想当用户点击按钮GrassLegumeForagebtn 我的FeedSelectListBox 时只填写草/豆类饲料类别中的所有饲料名称。

我该怎么做?

在 Damirchi 的帮助下,我的问题解决了

//-----------------

但现在我还有一个问题: 我想当用户从列表框中选择一个提要时,将数据库中的所有数据(如名称、编号、提要类型和,,,)放入数据网格视图中。

我在SelectFeedbtn 上使用了此代码,但它不起作用:

private void SelectFeedbtn_Click(object sender, EventArgs e)
    
        string StrCon = System.Configuration.ConfigurationManager.ConnectionStrings["FeedLibraryConnectionString"].ConnectionString;
        OleDbConnection Connection = new OleDbConnection(StrCon);
        string FeedSelectedID = FeedSelectListBox.SelectedValue.ToString();
        OleDbDataAdapter DataA = new OleDbDataAdapter("Select * from FeedLibrary where ID = 'FeedSelectedID'" , Connection);
        DataTable DTable = new DataTable();
        DataA.Fill(DTable);
        SelectedFeeddataGridView.DataSource = DTable;
    

FeedSelectListBoxValueMember 属性是ID,但错误是:

System.Data.dll 中出现“System.Data.OleDb.OleDbException”类型的未处理异常。

我什至使用了这个查询,但它仍然不起作用:

OleDbDataAdapter DataA = new OleDbDataAdapter("Select * from FeedLibrary where ID =" FeedSelectListBox.SelectedValue , Connection);

【问题讨论】:

Getlist 方法用于获取记录或表的列表,所以不要使用“frm2.SelectedFeeddataGridView.DataSource = Dtable;”在那个方法中。只需从该方法返回数据表并在 formload 方法中分配数据源。这样您也可以在 formload 事件本身中使用与 FeedSelectListBox 源相同的数据表。 是的,你是对的,我刚刚写了这个来测试我的连接,看看它是否正常工作,但我的问题是如何获取存在的提要的所有名称(而不是另一个字段只是名称)在一个类别中(例如草/豆类饲料类别)。 【参考方案1】:

首先,您首先设置FeedSelectListBoxDisplayMemberValueMember 属性,并在点击事件上使用此代码。 你可以把这段代码放在GrassLegumeForagebtn点击事件上。

string DBPath = Application.StartupPath;
        OleDbConnection Connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+DBPath+@"\DataBase\SampleFeeds.accdb");
        OleDbDataAdapter DataA = new OleDbDataAdapter("Select * from FeedLibrary where category='Grass / Legume'", Connection);
        DataTable Dtable = new DataTable();
        DataA.Fill(Dtable);
        frm2.FeedSelectListBox .DataSource = Dtable;

【讨论】:

tnx 很多,它正在工作,你能向我解释一下 Display Member 和 Value Member 有什么区别吗?我应该同时设置它们还是只设置其中一个,因为在这两种情况下它都有效 Display Member 供用户查看,在您的情况下 Feed Name/Description 和 Value Member 用于代码背后的操作,例如选择了哪一项,通常 Value Member 是 Id。 tnx,现在我有另一个问题,当用户从列表框中选择一个提要时,是否可以将数据库中的所有数据(如名称、编号、提要类型和 ,,,)放入数据网格视图? 是的,您可以从列表框中获取选定的值并按选定的提要 id 进行过滤 使用此查询过滤器 '"Select * from FeedLibrary where id=" Listbox.SelectedValue;' remove ' 从查询的第一个和最后一个 OleDbDataAdapter DataA = new OleDbDataAdapter("Select * from FeedLibrary where id =" frm2.FeedSelectListBox.SelectedValue,Connection);

以上是关于如何使用过滤器从 C# 中的访问中选择特定字段的主要内容,如果未能解决你的问题,请参考以下文章

如何从Swift中的Cloud FireStore Firebase访问特定字段

在 C# 中使用 mysql 文档存储(Nosql)中的日期字段进行过滤

如何访问特定的对象字段?

如何使用 c# 更新访问中的真/假字段?

如何过滤 Google Data Studio 中的特定字段?

如何按 C# 中的特定字段对对象列表进行排序?