帮助c#数组

时间:2010-11-16 08:50:29

标签: c#

我有一个有两列的数据表。我想将每列的行存储在一个数组中,以便我可以为每个列返回行。这样我相信我可以填充一个列表框(选项文本作为一列,选项值作为另一列)。

以下是我的开始:

public object dbAccess2()
{
    ArrayList arg = new ArrayList();
    DataTable myTable = GenericDataAccess.ExecuteSelectCmd("Vehicle_GetMakes");


        foreach (DataRow dRow in myTable.Rows)
        {
            arg.Add(dRow["VehicleMake"]);
            arg.Add(dRow["VehicleMakeId"]);
        }

    return arg.ToArray();   
}

3 个答案:

答案 0 :(得分:1)

在这种情况下,您可以创建一个类来保存每一行,并使用List<T>来保存数据,如下所示:

public class Vehicle
{
    public string Make { get, set };
    public string MakeId { get, set };
}

..

List<Vehicle> Vehicles = new List<Vehicle>();

..

foreach (DataRow dRow in myTable.Rows)
{
    Vehicles.Add(
        new Vehicle {
            Make = arg.Add(dRow["VehicleMake"]),
            MakeId = arg.Add(dRow["VehicleMakeId"])
        });
}

之后,您可以使用此列表轻松填充列表框:

listBox.DataSource = Vehicles;
listBox.DisplayMember = "Make";

但我认为你可能想要使用ListView。

答案 1 :(得分:1)

不要使用ArrayList类,它实际上已经过时了。改为使用数组或通用列表,以便获得类型化的结果。

您可以将列添加到以下列表中:

List<string> makes = myTable.Rows.Select(r => (string)r["VehicleMake"]).ToList();
List<int> makeIds = myTable.Rows.Select(r => (int)r["VehicleMakeId"]).ToList();

或者进入数组:

string[] makes = myTable.Rows.Select(r => (string)r["VehicleMake"]).ToArray();
int[] makeIds = myTable.Rows.Select(r => (int)r["VehicleMakeId"]).ToArray();

从数组填充下拉列表(因为我认为你的意思是,因为ListBox没有选项)的替代方法是使用数据绑定:

theDropdown.DataTextField = "VehicleMake";
theDropdown.DataValueField = "VehicleMakeId";
theDropdown.DataSource = myTable;
theDropdown.DataBind();

答案 2 :(得分:0)

您尝试的是在没有对象设计的情况下操纵真实对象,而是调用原始数据。这涉及到非常广泛且影响深远的问题,并且远远落后于当前的开发策略 - 广泛地介绍到这里,但至少你的问题是在应用程序和数据库之间建立一种脆弱的耦合。

第一步是为实际的车辆类建模。

public class Vehicle  
{  
    public string MakeId { get; set; }

    public string Make { get; set; }          
} 

第二步是为您的车辆(也许是“舰队”)构建一个管理类,它可以在IEnumerable接口后面抽象Vehicle集合。在内部,您将Vehicle集合存储为具体的通用集合(最有可能是List或Dictionary),并且不惜一切代价避免真正应该被认为是过时的ArrayList结构。

public class Fleet
{
    private List<Vehicle> _vehicles = new List<Vehicle>();

    public IEnumerable<Vehicle> Vehicles { return this._vehicles;}
}

第三步是内化到这个类(或者这个后面的一个类或者后面的一个一个等等)CRUD操作,它将与数据库存储的数据进行交互。这确实是一个实现细节,但您将在整个架构中应用所有类似的类。

此时,您将能够使用标准数据绑定方法直接使用IEnumerable属性。