如何从DataGridView中的ComboBox获取或设置数据

时间:2010-03-31 04:19:46

标签: c# winforms datagridview combobox

在C#.net中,我想在DataGridView的每个单元格中获取或设置数据到ComboBox 我该怎么办。

感谢。

3 个答案:

答案 0 :(得分:2)

您需要使用DataGridViewComboBoxColumn

填充下拉列表有两种方法。您可以使用通过Items属性返回的集合手动设置它,也可以通过DataSource,DisplayMember和ValueMember属性将列绑定到数据源。这与WinForms ComboBox控件相同。

以编程方式设置数据源的示例如下:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        dataGridView1.AutoGenerateColumns = false;

        List<User> users = new List<User>();
        users.Add(new User(){Name = "Fred", Id = 1});
        users.Add(new User(){Name = "Jill", Id = 2});
        users.Add(new User(){Name = "Bob", Id = 3});

        List<Account> accounts = new List<Account>();
        accounts.Add(new Account(){AccountName = "Mr Smith", UserId = 1});
        accounts.Add(new Account() { AccountName = "Ms Brown", UserId = 2 });
        accounts.Add(new Account() { AccountName = "Mr Smith 2", UserId = 1 });

        dataGridView1.DataSource = accounts;

        DataGridViewTextBoxColumn col1 = dataGridView1.Columns[1] as DataGridViewTextBoxColumn;
        col1.DataPropertyName = "AccountName";

        DataGridViewComboBoxColumn col = dataGridView1.Columns[0] as DataGridViewComboBoxColumn;
        col.DataSource = users;
        col.DisplayMember = "Name";
        col.DataPropertyName = "UserId";
        col.ValueMember = "Id";
    }

}

public class User
{
    public string Name { get; set; }
    public int Id { get; set; }
}

public class Account
{
    public string AccountName { get; set; }
    public int UserId { get; set; }
}

假设在设计器中添加了DataGridViewComboBoxColumn作为第一列,DataGridViewTextBoxColumn作为第二列。

您应该看到的是组合框有三个用户可用。对于三个帐户,DataGridView应该有三行来自数据源,并且应为每个帐户选择正确的组合框值。

对于任何DataGridView开发,您会发现非常方便的资源是DataGridView Faq

答案 1 :(得分:0)

首先,如果您还没有这样做,请确定如何向DataGridView提供数据(虚拟模式,数据绑定等)。

然后将用户可以选择的值添加到列标题上的Items集合中(假设它是DataGridViewComboBoxColumn)。

之后,使用您选择的基础数据提供方法设置单个单元格的值。

答案 2 :(得分:0)

试试这个......

local