绑定到DataGridView的字符串列表赋予字符串属性
本文关键字:字符串 属性 列表 绑定 DataGridView | 更新日期: 2023-09-27 18:15:54
我在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);
}
}
}
lexer说:
Method with 'params' is invoked. Have you intended to call more specific method 'int Add(object)'?
您需要将字符串包装在一个类中,这将它们作为带有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;
或BindingList
和BindingSource
,这将为您提供更广泛的选项和方法:
var blist = new BindingList<aString>(theStrings);
var source = new BindingSource(blist, null);
ltvCampos.DataSource = source ;
看看这个链接上的答案。我想这对你有帮助。他们使用BindingList<>而不是IList<>