我在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)'?
答案 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;
或BindingList
和BindingSource
,它们将为您提供更广泛的选项和方法:
var blist = new BindingList<aString>(theStrings);
var source = new BindingSource(blist, null);
ltvCampos.DataSource = source ;