从checkedListBox填充DataGridView

时间:2017-06-18 17:51:02

标签: c# winforms

我有一个checkedListBox1,我想将它的所有项目转换为DataGridView 我有以下代码

 string[] ar = new string[60];
        for (int j = 0; j < checkedListBox1.Items.Count; j++)
        {
            ar[j] = checkedListBox1.Items[j].ToString();
        }
        dataGridView2.DataSource = ar;

但是dataGridView2填充了项目的长度而不是项目本身,可以帮助吗?

3 个答案:

答案 0 :(得分:0)

这些代码块可能会给出一个想法(一切都适合我)。 CheckedListBox项返回一个集合。它来自IList接口,因此如果我们使用List项作为datagridview的数据源来解决问题。我使用通用List作为Sample的附加类。当我们使用字符串数组时,datagridview显示每个项目的长度。在这里,覆盖ToString会返回原始值。

class Sample
{
   public string Value { get; set; }

   public override string ToString()
   {
       return Value;
   }
}

在表单类中:

private void button1_Click(object sender, EventArgs e)
{
  CheckedListBox.ObjectCollection col = chk.Items;
  List<Sample> list = new List<Sample>();
  foreach (var item in col)
  {
      list.Add(new Sample { Value = item.ToString() });
  }

  dgw.DataSource = list;

 }

答案 1 :(得分:0)

这个简单的DataTable代码似乎有用......

DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
for (int j = 0; j < checkedListBox1.Items.Count; j++) {
  dt.Rows.Add(checkedListBox1.Items[j].ToString());
}
dataGridView1.DataSource = dt;

答案 2 :(得分:0)

因为DataGridView查找包含对象的属性。对于字符串,只有一个属性 - 长度。所以,你需要一个像这样的字符串的包装器。

string[] ar = new string[60];
for (int j = 0; j < checkedListBox1.Items.Count; j++)
{
    ar[j] = checkedListBox1.Items[j].ToString();
}
dataGridView1.DataSource = ar.Select(x => new { Value = x }).ToList();