c# - 从 ComboBox 获取值的同时获取 System.Data.DataRowView

标签 c# winforms combobox

我试图根据 ComboBox 中选择的项目从数据库中获取数据,但是当我尝试访问所选的 ComboBox 项目时,它给我“System. Data.DataRowView"[...?]

我在另一个函数中用一个简单的选择查询做了同样的事情并且工作正常但我不知道为什么它在这个查询中不起作用:

_dataAdapter.SelectCommand.CommandText = "SELECT lt.Name FROM Leader as lt LEFT JOIN Material as mt ON lt.Student_id=mt.lead_id where lt.Name=" + "'" + cmbLeader.SelectedItem.ToString() + "'";

谁能告诉我可能是什么问题?

最佳答案

SelectedItem 是绑定(bind)到 ComboBox 数据源的数据对象,在本例中为 DataRowView

您需要将 SelectedItem 转换为 DataRowView,然后从中检索适当的值。

您可以按如下方式执行此操作:

DataRowView oDataRowView = cmbLeader.SelectedItem as DataRowView;
string sValue = "";

if (oDataRowView != null) {
   sValue = oDataRowView.Row["YourFieldName"] as string;
}

然后替换(在您的 CommandText 中):

cmbLeader.SelectedItem.ToString()

与:

sValue

这将优雅地处理 DataRowView 为 null 的情况。

上面代码中的

YourFieldName应该是数据源中包含Name值的字段的名称。如果您已在组合框的 DisplayMemberValueMember 属性中设置此字段名称,那么您可以只使用此属性来代替此字段时的一些心痛更改或当您想在其他地方重用此代码时:

   sValue = oDataRowView.Row[cmbLeader.DisplayMember] as string;

或者,您可以使用 cmbLeader.SelectedValue

关于c# - 从 ComboBox 获取值的同时获取 System.Data.DataRowView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372464/

相关文章:

c# - 使用 multipart/form-data 上传 - 无法在自托管服务中检索文件

c# - Apache ignite 缓存查看器(如 Redis 桌面管理器)

c# - 建议零售价 : Why use instance field values instead of parameters?

c# - 将多个 WSDL 版本反序列化为同一对象

c# - Windows 应用程序设置 - 更新和数据库架构更改

javascript - 使用 JSON 填充 ExtJS 组合框

c# - 建立和使用Scintilla.NET的问题

wpf - 如何默认关闭群组?

delphi - 当其父级是面板时,ComboBox 无法正常工作

c# - 如何在 C# 的组合框中按值查找项目?