BindingList<;字符串>;用字符串长度而不是字符串本身填充数据视图
本文关键字:字符串 数据 视图 填充 gt lt BindingList | 更新日期: 2023-09-27 17:58:01
早上好!
我有一个list<string>
,它被转换为BindingList<string>
,如下所示。然后,它被绑定到一个datagridview
,这样我就可以用这个列表中的适当值来填充它。
然而,它不是显示字符串本身,而是用字符串的长度填充。我以前从未使用过数据网格,所以任何帮助都将不胜感激!
提前感谢,我已经在下面附上了代码的相关部分:
DataGridViewCell cell = new DataGridViewTextBoxCell();
DataGridViewTextBoxColumn colExisting = new DataGridViewTextBoxColumn()
{
CellTemplate = cell,
Name = "Template",
HeaderText = "Existing Template",
};
findReplaceGrid.Columns.Add(colExisting);
var bTemplatesInFiles = new System.ComponentModel.BindingList<string>(templatesInSelection);
findReplaceGrid.DataSource = bTemplatesInFiles;
编辑:
templatesInSelection
定义如下:
public static System.Collections.Generic.List<string> templatesInSelection;
并实例化为:
templatesInSelection = new System.Collections.Generic.List<string>();
老问题,我知道。但也许有人会遇到这个问题,就像我今天试图解决这个问题一样。我所做的是使用BindingSource而不是BindingList,并将BindingSources DataSource设置为ListOfStrings.ConvertAll(x => new { Value = x })
。
我在这篇文章中找到了这个解决方案。
BindingList
是为复杂对象绑定而设计的。
如果您尝试只绑定这些字符串,它将枚举构建字符串的字符,并且只显示Count
-属性。
一个可能的解决方案是(丑陋但有效):
包装类
public class StringValue {
public StringValue(string s) {
this._value = s;
}
public string Text {
get {
return this._value;
}
set {
this._value = value;
}
}
private string _value;
}
用法
var l = new List<StringValue>();
l.Add(new StringValue("Hello"));
l.Add(new StringValue("beautiful"));
l.Add(new StringValue("World"));
var bTemplatesInFiles = new BindingList<StringValue>(l);
this.dataGridView1.DataSource = bTemplatesInFiles;
希望这能有所帮助!
编辑
一种更简单的方法(如您所愿)
首先,以某种方式添加一列(设计器或代码)
然后执行:
var l = new List<string>();
l.Add("Hello");
l.Add("beautiful");
l.Add("World");
foreach (var s in l)
{
this.dataGridView1.Rows.Add(s);
}