我是个软件开发新手,需要一些帮助。
我正在创建一个具有DataGridView的WinForm。DataGridView将显示包含FromPortID和ToPortID的表计划。这两个字段的值应该与相关表PortCode中的外键匹配。PortCode表有PortCodeID和PortName。
在DataGridView中,我现在有了用于FromPort和ToPort的PortCodeID。我需要允许用户输入新记录,但他们应该输入或选择PortCodeID,而不是输入PortName。
为此,我创建了一个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不是最好的设计。作为一个有经验的程序员,你能给我一些关于如何实现这一点的反馈吗?)
发布于 2020-06-16 14:50:40
我用一个自定义的查找表单替换了ComboBox。效果要好得多。
https://stackoverflow.com/questions/62324170
复制相似问题