将字符串列表绑定到DataGridView会提供字符串属性

时间:2014-08-01 13:02:31

标签: c# datagridview

我在StackOverflow中发现了一个类似的问题,但它没有答案。我正在尝试将IList<string>绑定到DataGridView作为其DataSource,但不是输出字符串列表,就像在ListView中一样,它会输出我列表中元素的属性,在本例中为Length

我的代码:

public void FindMatches()
{
    const string regex = @"\{([a-zA-Z_][a-zA-Z0-9_]*)\}";
    IList<string> names = (from Match match in Regex.Matches(ObterConteudoArquivo(), regex) select match.Value).ToList();
    _view.Lista = names;
}

既然我在List中存储了一个包含我所有匹配项的列表,例如{ "{CP}", "{DP}", "{EP"} },我想将它们绑定到我的DataGridView:

public IList<string> Lista
{
    set
    {
        ltvCampos.DataSource = value;
    }
}

这只绑定每个字符串的Length。 我也做了:

public IList<string> Lista
{
    set
    {
        foreach (string name in value)
        {
            DataGridTextBox row = new DataGridTextBox();
            row.Text = name;
            ltvCampos.Rows.Add(row);
        }
    }
}

勒克斯说:

Method with 'params' is invoked. Have you intended to call more specific method 'int Add(object)'?

2 个答案:

答案 0 :(得分:0)

查看this link上的答案。我认为这会对你有所帮助。他们使用 BindingList&lt;&gt; 而不是 IList&lt;&gt;

答案 1 :(得分:0)

你需要在一个类中包装你的字符串,它将它们作为公共属性公开,同时使用setter和getter:

class aString { public string theString { get; set; } 
                public aString(string s) { theString = s; }  }

现在创建一个字符串列表..

List<aString> theStrings = new List<aString>();

..并填写您的匹配项:

theStrings  = (from Match match in Regex.Matches(text, regex) 
               select new aString(match.Value)).ToList();

现在您可以将列表绑定到DGV:

ltvCampos.DataSource = theStrings;

对于增加的功能,您可能希望使用BindingList(其中包括将引发更改事件)插入一个或两个以上的绑定层:

var blist = new BindingList<aString>(theStrings);
ltvCampos.DataSource = theStrings;

BindingListBindingSource,它们将为您提供更广泛的选项和方法:

var blist = new BindingList<aString>(theStrings);
var source = new BindingSource(blist, null);
ltvCampos.DataSource = source ;