加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – ComboBox返回System.Data.DataRowView

发布时间:2020-12-15 22:29:37 所属栏目:百科 来源:网络整理
导读:我的C#代码如下 private void offHwyManufacturer_SelectedValueChanged(object sender,EventArgs e) { var offHwyManufacturerSelected = offHwyManufacturerComboBox.SelectedValue; var query = "SELECT DISTINCT [EQUIPMENT TYPE] FROM ApplicationOffHw
我的C#代码如下

private void offHwyManufacturer_SelectedValueChanged(object sender,EventArgs e)
    {
        var offHwyManufacturerSelected = offHwyManufacturerComboBox.SelectedValue;
        var query = "SELECT DISTINCT [EQUIPMENT TYPE] FROM ApplicationOffHwyData WHERE MANUFACTURER = '" + offHwyManufacturerSelected + "' ORDER BY [EQUIPMENT TYPE]";
        using (var adaptor = new OleDbDataAdapter(query,ConnString))
        {
            var offHwyEquipmentTypeDataTable = new DataTable();
            adaptor.Fill(offHwyEquipmentTypeDataTable);

            offHwyEquipmentTypeComboBox.DisplayMember = "[EQUIPMENT TYPE]";
            offHwyEquipmentTypeComboBox.ValueMember = "[EQUIPMENT TYPE]";
            offHwyEquipmentTypeComboBox.DataSource = offHwyEquipmentTypeDataTable;
        }
    }

offHwyManufacturerComboBox是第一个组合框,它会触发’SelectedValueChanged’事件(这会正确显示元素)

但是,在第二个下拉列表(设备类型)上,我得到System.Data.DataRowView而不是实际值.

我很清楚我需要分配一个DisplayMember / ValueMember,我已经完成了,但它仍然没有给出正确的结果.

如果我手动运行该SQL命令(使用’Manufacturer’中的第一个选项作为示例),这就是结果

EQUIPMENT TYPE
Compactors
Crawler Tractors
Dozers
Drilling Equipment
Excavators
Farm Equipment
Forestry Equipment
Generators,Gen Set Engines
Hydraulic Controls
Industrial Engines
Integrated Toolcarriers
Lift Trucks
Loaders
Marine Engines
Marine Gear
Material Handlers
Motor Graders
Off-Highway Trucks
Paving Equipment
Pipelayers
Scrapers,Wheel Tractors
Telehandlers
Turbine Engines
Winches
Windrow Elevators

显然这只是返回一行,列名是’EQUIPMENT TYPE’

这是我的WinForm应用程序的屏幕截图.

我只是密集,还是我错过了一些完全明显的东西?

解决方法

唯一看似奇怪的事情是a)为DisplayMember和Value Memberand使用字母数字字段b)字段名称中的空格(即使您在括号中附上[EQUIPMENT TYPE]).

所以第一个建议是修复这样的潜在问题:

var query = "SELECT DISTINCT Id,[EQUIPMENT TYPE] AS EquipmentType FROM ApplicationOffHwyData WHERE MANUFACTURER = '" + offHwyManufacturerSelected + "' ORDER BY [EQUIPMENT TYPE]";
using (var adaptor = new OleDbDataAdapter(query,ConnString))
{
    var offHwyEquipmentTypeDataTable = new DataTable();
    adaptor.Fill(offHwyEquipmentTypeDataTable);

    offHwyEquipmentTypeComboBox.DisplayMember = "EquipmentType";
    offHwyEquipmentTypeComboBox.ValueMember = "Id";
    offHwyEquipmentTypeComboBox.DataSource = offHwyEquipmentTypeDataTable;
}

第二个建议是使用BindingSource及其DataSource = offHwyEquipmentTypeDataTable,然后将组合框的DataSource设置为BindingSource,其DisplayMember设置为value,Value Member设置为key.这是粗略的概述:

BindingSource bs;
...
var offHwyEquipmentTypeDataTable = new DataTable();
adaptor.Fill(offHwyEquipmentTypeDataTable);

bs.DataSource = offHwyEquipmentTypeDataTable;
offHwyEquipmentTypeComboBox.DisplayMember = "EquipmentType";
offHwyEquipmentTypeComboBox.ValueMember = "Id";
offHwyEquipmentTypeComboBox.DataSource = bs;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读