DataGridView C#使用MVP Pattern为每行添加不同的值到Combobox中

时间:2014-03-18 22:56:01

标签: c# winforms datagridview combobox

我目前正在尝试将Layer(我的类)对象列表中的值添加到datagridview。第一列只是带有文本的常规单元格,但我希望第二列包含每行的值的组合框。我的演示者中有一个foreach循环,循环遍历对象列表并调用AddRow方法,并将名称值和样式列表传递给它。这是我到目前为止所得到的。标题列表正在进行中,但组合框中没有样式。如何使用列表中的值为每个创建的行填充组合框?由于公司政策,我无法发布截图,所以我会尽力回答任何歧义,谢谢。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Service
{
    public class Layer
    {
        public string Name { get; set; }
        public string Title { get; set; }
        public string Abstract { get; set; }
        public bool Selected { get; set; }
        public List<string> CRS = new List<string>();
        public List<string> Styles = new List<string>();

    }
}

//

 //Method Inside of presenter to provide datagridview with values
 public void ProvideLayers()
        {
            if (_lview != null && _layers != null)
            {

                foreach (Layer lay in _layers)
                {
                    if (lay.Styles.Count == 0)
                    {
                        _lview.AddRow(lay.Title,new List<string>());
                        continue;
                    }
                    else
                    {
                        _lview.AddRow(lay.Title,lay.Styles);
                    }

                }

            }

        }

//

public void AddRow(string lName,List<string> lStyles)
        {
            dataGridView1.Rows.Add(lName,lStyles);
        }

1 个答案:

答案 0 :(得分:2)

您可以设置组合框的数据源。

public void AddRow(string lName,List<string> lStyles)
{
    var dgvRow = new DataGridViewRow();

    dgvRow.Cells.Add(new DataGridViewTextBoxCell());
    dgvRow.Cells.Add(new DataGridViewComboBoxCell());

    dgvRow.Cells[0].Value = lName;

    ((DataGridViewComboBoxCell) dgvRow.Cells[1]).DataSource = lStyles;

    dataGridView1.Rows.Add(dgvRow);
}

注意:如果您尚未设置列,则执行此操作会强制您定义DataGridView的列,如下所示:

dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
dataGridView1.Columns.Add(new DataGridViewComboBoxColumn());

More info here about ComboBox.DataSource