如何使用过滤器从 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;
而FeedSelectListBox
的ValueMember
属性是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】:首先,您首先设置FeedSelectListBox
的DisplayMember
和ValueMember
属性,并在点击事件上使用此代码。
你可以把这段代码放在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)中的日期字段进行过滤