从列表中读取项目并将其显示为字符串

时间:2016-01-11 09:52:04

标签: c# list datagridview

我有一个带有对象数据类型的列表,我正在尝试填充,然后读出一个字符串。该列表应包含DataGridView中每列的数据:

[Serializable]
public sealed class ColumnOrderItem
{
    public int DisplayIndex { get; set; }
    public int Width { get; set; }
    public bool Visible { get; set; }
    public int ColumnIndex { get; set; }
}

private void test()
{

List<ColumnOrderItem> columnOrder = new List<ColumnOrderItem>();
                DataGridViewColumnCollection columns = dsgDataGrid.Columns;
                for (int i = 0; i < columns.Count; i++)
                {
                    columnOrder.Add(new ColumnOrderItem
                    {
                        ColumnIndex = i,
                        DisplayIndex = columns[i].DisplayIndex,
                        Visible = columns[i].Visible,
                        Width = columns[i].Width

                    });
                }

                colData = string.Join(",", columnOrder);

MessageBox.Show(colData);
}

我期待的是MessageBox应该按顺序显示每个项目值,如DisplayIndex,Width,Visible,ColumnIndex,DisplayIndex,Width,Visible,ColumnIndex ......等等。问题是我得到的所有内容都是0,1,2,这似乎只是dsgDataGrid下的3列ColumnIndex,它是一个DataGridView。有谁知道如何将所有数据输出到单个字符串?

感谢。

3 个答案:

答案 0 :(得分:4)

最适合您的选项是override the ToString method因此,您的班级定义如下:

    [Serializable]
    public sealed class ColumnOrderItem
    {
        public int DisplayIndex { get; set; }
        public int Width { get; set; }
        public bool Visible { get; set; }
        public int ColumnIndex { get; set; }
        public override string ToString()
        {
            StringBuilder overRideString = new StringBuilder();
            overRideString.AppendLine("DisplayIndex" + DisplayIndex.ToString());
            overRideString.AppendLine("Width" + Width.ToString());
            overRideString.AppendLine("Visible" + Visible.ToString());
            overRideString.AppendLine("ColumnIndex" + ColumnIndex.ToString());
            return overRideString.ToString();
        }
    }

使用方法:

       StringBuilder details = new StringBuilder();
            foreach (ColumnOrderItem item in columnOrder)
            {
                details.AppendLine(item.ToString());  
            }
            details.ToString(); // this will give you the required result

答案 1 :(得分:2)

您可以为ToString定义ColumnOrderItem并使用

THX通过ToString @Neijwiert

向我通知String.join的隐含通知

例如:

public string ToString()
{
  return string.Format("{0},{1},{2},{3}",
               this.ColumnIndex,
               this.DisplayIndex,
               this.Visible,
               this.Width);
}

致电String.join(spliter,enums:IEnumerable<T>)

它的作用与String.join(spliter,enums.Select(i->i.toString()))

相同
  

Join(String,IEnumerable)是一种方便的方法,它允许您连接IEnumerable集合的每个成员,而无需先将它们转换为字符串。 IEnumerable集合中每个对象的字符串表示形式是通过调用该对象的ToString方法派生的。

String.Join Method (String, IEnumerable)-MSDN

答案 2 :(得分:0)

您可能必须在ColumnOrderItem类中添加ToString覆盖,如:

        public override string ToString()
        {
            return string.Format(
                "[DisplayIndex: {0}, Width: {1}, Visible: {2}, ColumnIndex: {3}]\n",
                DisplayIndex,
                Wi`enter code here`dth,
                Visible,
                ColumnIndex);


        }

然后当你执行var colData = string.Join(",", columnOrder);时,这应该会为您提供所需的输出,例如enter image description here