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

时间:2016-07-20 10:40:12

标签: c# string datagridview

早!

我有list<string>转换为BindingList<string>,如下所示。然后绑定到datagridview,以便我可以使用此列表中的适当值填充它。

但是,不是显示字符串本身,而是填充字符串的长度。我以前从未使用过datagrids,所以任何帮助都会受到赞赏!

在此先感谢,我已附上以下相关代码部分:

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

1 个答案:

答案 0 :(得分:1)

BindingList是为复杂对象绑定而设计的。

如果您尝试仅绑定字符串,它将枚举构建字符串的字符,并仅显示Count - 属性。

一个可能的解决方案是这个(丑陋但有效):

<强> WrapperClass

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;

希望这有帮助!

修改

一种更简单的方法(如你所愿)

首先,以某种方式添加列(Designer或Code)

然后做:

var l = new List<string>();
      l.Add("Hello");
      l.Add("beautiful");
      l.Add("World");
      foreach (var s in l)
      {
        this.dataGridView1.Rows.Add(s);
      }