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>();

BindingList<;字符串>;用字符串长度而不是字符串本身填充数据视图

老问题,我知道。但也许有人会遇到这个问题,就像我今天试图解决这个问题一样。我所做的是使用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);
      }