【发布时间】:2011-04-24 17:01:01
【问题描述】:
我有一个非常琐碎的要求,这让我发疯了。我在 Windows 窗体应用程序中有一个 DataGridView。这包含一个数据绑定的组合框列。我正在使用该组合框的 DisplayMember 和 ValueMember 属性。
现在我的要求是 ComboBox 应该在下拉列表中显示 DisplayMember 列表,但是当用户从中选择一项时,我应该在用户可见的组合框单元格中显示该 DisplayMember 的一部分。例如。
我的显示成员列表如下:
“客户 1 - 客户 1” “客户 2 - 客户 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";
【问题讨论】:
-
为什么不将值成员设置为“Cust1”
-
@The King:但我不希望 value 成员作为下拉列表。
-
gridview 中的组合框!数据源到底是什么...我的意思是,您用来填充网格/组合框的代码是什么?我可能有一个解决方案
-
@Anurag:它是一个datagridview,其中一列的类型是comboboxcolumn。对于这个组合框列,我分配了一个数据源,它是一个简单的客户对象 {Id, CustCode, CustName}。我将通过将数据源分配给组合框来更新问题。
标签: c# winforms datagridview drop-down-menu datagridviewcombobox