我以为这很简单,就像在Access中一样。

用户需要将数据表中一列的值设置为1或2。

我想展示一个组合框,其中显示“一个”,“两个”并在幕后设置1或2,就像我在Access-Forms中做过很多次一样。

另一方面,如果显示该表,则该表不应显示1或2,而应显示ComboBox中的相应字符串。

我怎样才能使这个简单的任务起作用?

最佳答案

我假设您的意思是DataGridView,它用于Windows窗体,而GridView是用于ASP.NET,尽管您是这样标记问题的。

您如何将数据绑定(bind)到DataGridViewComboBoxColumn?您需要在设置DataGridViewComboBoxColumn的DataSource时设置DisplayMember和ValueMember属性。到DisplayMember的MSDN链接显示了一个示例,但由于将两个属性都设置为同一事物,因此它并未完全显示您的要求。

DisplayMember将是您希望用户看到的文本,ValueMember将是与之关联的隐藏的基础值。

举个例子,假设您的项目中有一个Choice类,它代表您的选择,如下所示:

public class Choice
{
    public string Name { get; private set; }
    public int Value { get; private set; }
    public Choice(string name, int value)
    {
        Name = name;
        Value = value;
    }

    private static readonly List<Choice> possibleChoices = new List<Choice>
    {
        { new Choice("One", 1) },
        { new Choice("Two", 2) }
    };

    public static List<Choice> GetChoices()
    {
        return possibleChoices;
    }
}

GetChoices()将返回一个包含您的选择的列表。理想情况下,您将在服务层中使用这种方法,或者,如果愿意的话(可以在表单的代码后面),可以在其他位置构建自己的列表。为简单起见,我将所有这些都放在同一个类中。

在您的表单中,您可以将列表绑定(bind)到DataGridViewComboBoxColumn,如下所示:
// reference the combobox column
DataGridViewComboBoxColumn cboBoxColumn = (DataGridViewComboBoxColumn)dataGridView1.Columns[0];
cboBoxColumn.DataSource = Choice.GetChoices();
cboBoxColumn.DisplayMember = "Name";  // the Name property in Choice class
cboBoxColumn.ValueMember = "Value";  // ditto for the Value property

现在,您应该在组合框中看到“一个”和“两个”。从中获取所选值时,它应该是基础1或2值。

这就是使用DisplayMember/ValueMember的想法。这应该可以帮助您并帮助您适应所使用的数据源。

09-25 16:26