我有一个非常微不足道的要求,这让我发疯了。我在 Windows 窗体应用程序中有一个 DataGridView。这包含一个数据绑定的组合框列。我正在使用该组合框的 DisplayMember 和 ValueMember 属性。
现在我的要求是 ComboBox 应该在下拉列表中显示 DisplayMember 列表,但是当用户从中选择一项时,我应该在用户可见的组合框单元格中显示该 DisplayMember 的一部分。例如。
我的显示成员列表如下所示:
“Cust1 - 客户 1” “Cust2 - 客户 2” “Cust3 - 客户 3”
并且当用户从上面的列表中选择其中任何一个时(假设用户选择了“Cust2 - Customer 2”),那么我需要将组合框列单元格中的值显示为仅“Cust2”而不是完整的 DisplayMember 文本。
此 DisplayMember 列表是绑定到它的数据源中的两个字段的组合,即第一部分指向 CustomerCode 字段,第二部分指向客户名称。用户从下拉列表中选择一项后,我只需要在 ComboBox 单元格中显示 CustomerCode。
我怎样才能做到这一点?或者我应该想出我自己的控件,它将具有不同的 AutoCompleteCustomSource 并显示成员值。即使我也对这种方法感到困惑。
更新:因为没有人想出任何解决我的问题的方法。现在我为此开始赏金,如果有人可以建议我以其他方式实现相同的功能,那就太好了。
我什至尝试想出我自己的控件,并尝试使用简单的组合框来显示与所选下拉列表不同的值,即使这样也没有用。还有其他方法可以实现吗?任何提示和技巧都是非常可观的。
@Anurag:这是我使用过的代码。在设计模式下创建了一个datagridview。创建一列类型为“DataGridViewComboBoxColumn”的列,并将其命名为 CustomerColumn。
在设计器文件中,它如下所示:
private System.Windows.Forms.DataGridViewComboBoxColumn CustomerColumn;
这是我用于数据源的实体类
public class Customer
{
public int Id { get; set; }
public string CustCode { get; set; }
public string CustName { get; set; }
public string NameWithCode { get; set; }// CustCode - CustName format
}
在表单加载事件中,我正在执行以下操作:
CustomerColumn.DataSource = GetCustomers();
CustomerColumn.DisplayMember = "NameWithCode";
CustomerColumn.ValueMember = "Id";