Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#数组的帮助_C# - Fatal编程技术网

c#数组的帮助

c#数组的帮助,c#,C#,我有一个包含两列的数据表。我想将每一列的行存储在一个数组中,这样就可以为每一列返回行。这样我相信我可以填充一个列表框(选项文本作为一列,选项值作为另一列) 以下是我开始的内容: public object dbAccess2() { ArrayList arg = new ArrayList(); DataTable myTable = GenericDataAccess.ExecuteSelectCmd("Vehicle_GetMakes"); foreac

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

以下是我开始的内容:

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

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

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"])
        });
}
List<string> makes = myTable.Rows.Select(r => (string)r["VehicleMake"]).ToList();
List<int> makeIds = myTable.Rows.Select(r => (int)r["VehicleMakeId"]).ToList();

但是我认为您可能需要使用ListView。

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

您可以将列放入如下列表:

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"])
        });
}
List<string> makes = myTable.Rows.Select(r => (string)r["VehicleMake"]).ToList();
List<int> makeIds = myTable.Rows.Select(r => (int)r["VehicleMakeId"]).ToList();
从数组填充下拉列表(我假设您的意思是,列表框没有选项)的另一种方法是使用数据绑定:

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

您尝试的是在没有对象设计的情况下操纵真实对象,而是调用原始数据。这有着非常广泛和深远的问题,远远落后于当前的开发战略——这里要讨论的是,但并非最不重要的问题是,应用程序和数据库之间存在着脆弱的耦合

第一步是模拟实际的车辆类别

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

    public string Make { get; set; }          
} 
第二步是为您的车辆(可能是“车队”)构建一个管理类,它可以在IEnumerable接口后面抽象车辆集合。在内部,您将把Vehicles集合存储为一个具体的通用集合(最有可能是一个列表或字典),并不惜一切代价避免真正应该被视为过时的ArrayList结构

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

    public IEnumerable<Vehicle> Vehicles { return this._vehicles;}
}
公共级机队
{
私人列表_车辆=新列表();
公共IEnumerable Vehicles{返回此。_Vehicles;}
}
第三步是将CRUD操作内部化到这个类(或这个类后面的类或那个类后面的类等),这些操作将与数据库存储的数据交互。这确实是一个实现细节,但您将在整个体系结构中应用所有类似的类


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

那么问题是什么?是否要将数据表中的数据加载到列表框中?(如果您想在DATATET中保留单独的列,您可能需要考虑ListVIEW或DATAGIDVIEW),当然,您可以只使用DATABATE作为列表框中的数据源,将DATATEXTELD和DATAVALUEFED设置为您的列名。不要使用
ArrayList
。改为使用
List
(在您的代码示例中应该是
List
,尽管按照@Yogesh的回答,设计一个特定类型可能更好)。我应该更清楚,我将使用jQuery ajax为一个列表框获取一列值,并将另一列作为每个选项值。我不希望每个选项值都基于数组的索引,因为我使用数据库存储过程中的值将内容分配给类别。感谢Yogesh,我的计划是使用jQuery ajax填充html列表框。我可以用我的旧代码实现这一点,但是数组的索引被存储为选项值,我需要索引作为我的db列的id字段。感谢对ArrayList已经过时的澄清,我想知道为什么会有ArrayList和List。