【问题标题】:Foreign key databinding in a datagridview - Combobox with many rows数据网格视图中的外键数据绑定 - 具有多行的组合框
【发布时间】:2020-06-11 12:14:42
【问题描述】:

我是开发软件的新手,需要一些帮助。

我正在创建一个具有 DataGridView 的 WinForm。 DataGridView 显示包含 FromPortID 和 ToPortID 的表 Schedule。这两个字段的值应该与相关表 PortCode 中的外键匹配。 PortCode 表有 PortCodeID 和 PortName。

在 DataGridView 中,我现在拥有 FromPort 和 ToPort 的 PortCodeID。我需要允许用户输入新记录,但他们应该输入或选择 PortName,而不是输入 PortCodeID。

为此我创建了一个 ComboBox 列:

var adaper = new SqlDataAdapter("SELECT * FROM PortCode order by PortName", Helper.CnnVal("ShipMaster"));
var dataTable = new DataTable();
adaper.Fill(dataTable);
var ComboBoxColumn = new DataGridViewComboBoxColumn();
ComboBoxColumn.Name = "FromPortComboBoxColumn";
ComboBoxColumn.HeaderText = "FromPort";
ComboBoxColumn.DataSource = dataTable;
ComboBoxColumn.DataPropertyName = "FromPortID";
ComboBoxColumn.DisplayMember = "PortName";
ComboBoxColumn.ValueMember = "PortCodeId";
this.dgv.Columns.Add(ComboBoxColumn); 

这行得通。如果我更改 ComboBox 中的选择,则相关的 FromPortID 会更改。但问题是 PortCode 表包含 7000 条记录。打开下拉列表需要 2-5 秒 - 这是针对包含此 ComboBox 的每个单元格的。我添加了自动完成功能,它可以工作。但是性能仍然很差。

我想在这种情况下使用 ComboBox 并不是最好的设计。作为一个有经验的程序员,你能不能给我一些反馈:)

【问题讨论】:

  • 嗨,托马斯。如果我理解,每次用户单击 ComboBox 时,他都会看到 7,000 行可供选择?我想说,从用户体验的角度来看,找到正确的条目可能并不有趣。我希望他们不必每天重复该任务太多次 :-) 如果我们可以过滤列表,它可能有助于缓解这两个方面。有什么想到的吗?

标签: c# winforms datagridview lookup


【解决方案1】:

我用自定义查找表单替换了 ComboBox。效果更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 2017-12-18
    • 2017-05-17
    • 1970-01-01
    • 2012-09-01
    • 2015-04-11
    • 2014-07-16
    相关资源
    最近更新 更多