C#Arrays作为类属性

时间:2012-04-26 22:13:51

标签: c# arrays class

我搜索了很多但找不到任何解决方案。我可能使用了错误的关键字。我有一个类,它基本上是ListView控件的扩展版本。

我为自定义的ListView定义了一些自定义属性,例如FileName,OrderType等,它们工作正常。

我还想将一个数组传递给我的类,其中包括ColumnNames以填充类中的数据。

MyListView班级

public class ColumnNames : Attribute
{
    public string[] Values { get; set; }

    public ColumnNames(params string[] values)
    {
        this.Values = values;
    }
}

[ColumnNames("a1","a2","a3","a4","a5","a6","a7","a8","a9")]

public MyListView() {

     for (int i = 0; i < 7; i++)
            this.Columns.Add(this.ColumnNames[i]);

    }

Form1班级

MyListView lstv = new MyListView();

lstv.ColumnNames[0] = "hede1";
lstv.ColumnNames[1] = "hede2";
lstv.ColumnNames[2] = "hede3";

编辑:我根本无法达到我想要的效果。你能告诉我一个有效的例子吗?

我使用此listview显示从数据库中获取的信息。 (我使用ListView而不是DataGrid)我想将列名传递给这个类,它将用于SQL查询“SELECT xxxxx,yyyyy,zzzz FROM table;”和列名this.columns.add(“xxxxx”); this.columns.add( “YYYYY”); this.columns.add( “ZZZZZ”);

3 个答案:

答案 0 :(得分:1)

如果您想坚持使用该属性,可以像这样访问其数据:

var attributes = this.GetType().GetCustomAttributes(typeof(ColumnNames), false);
foreach (var attr in attributes)
{
    var a = attr as ColumnNames;
    foreach (var column in a.Values)
    {
        this.Columns.Add(column);
    }
}

答案 1 :(得分:0)

在初始化控件之前,您正在类构造函数中添加列。尝试覆盖OnLoad事件,并在那里执行:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    foreach (var columnName in this.ColumnNames)
        this.Columns.Add(columnName);
}

答案 2 :(得分:0)

我认为你误解了属性的目的。属性描述了一个成员或类,但似乎试图像继承那样使用它。

也许这就是你要找的东西:

public class MyListView{
   public string[] ColumnNames {get; set;}
}