绑定到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)'?

绑定到DataGridView的字符串列表赋予字符串属性

您需要字符串包装在一个类中,这将它们作为带有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 ;

看看这个链接上的答案。我想这对你有帮助。他们使用BindingList<>而不是IList<>