2010-11-16 75 views
0

我有一個數據表兩欄。我想將每列的行存儲在一個數組中,以便我可以爲每個單列返回行。這樣我相信我可以填充一個列表框(選項文本爲一列,選項值爲另一列)。幫助與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(); 
} 
+7

那麼這有什麼問題? – AlexanderMP 2010-11-16 08:52:03

+0

是否要從列表框中的DataTable加載數據?(如果您想保留DataTable中的單獨列,您可能需要考慮ListView或DataGridView) – Rox 2010-11-16 08:56:17

+0

當然,您可以將DataTable用作列表框中的數據源,將DataTextField和DataValueField設置爲列名稱? – Paddy 2010-11-16 08:57:58

回答

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"; 

但是我想你m唉想要使用ListView。

+0

感謝Yogesh,我的計劃是使用jQuery ajax填充html列表框。我可以用我的舊代碼做到這一點,但數組的索引被存儲爲選項值,我需要索引作爲我的數據庫列的ID字段。 – 2010-11-16 23:57:08

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

來填充一個下拉列表(因爲這是我認爲你的意思是,作爲替代一個列表框沒有選項)來使用數據綁定:

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

感謝您澄清ArrayList已過時,我想知道爲什麼有一個ArrayList和一個List <>。 – 2010-11-19 03:16:31

0

你是什麼試圖在沒有對象設計好處的情況下操作實際對象,而是調用原始數據。這具有非常廣泛和深遠的問題,並且遠遠落後於當前的開發策略 - 廣泛涉及這裏,但不僅僅是您的問題正在建立在應用程序和數據庫之間的脆弱耦合中。

第一步是模擬一個實際的車輛類。

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

    public string Make { get; set; }   
} 

第二步是建立一個管理類的車輛(「艦隊」吧?),它可以抽象的IEnumerable接口後面的車輛集合。在內部,您會將Vehicles集合存儲爲具體的泛型集合(最有可能是List或Dictionary),並且不惜一切代價避免真正應該被視爲過時的ArrayList結構。

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

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

步驟三是內化到這個類(或該後面一個類或後面一個等,等)CRUD操作將與數據庫中的存儲數據進行交互。這是一個真正的實現細節,但是您將在整個架構中申請所有類似的類。

此時,您將能夠使用標準Databinding方法直接使用IEnumerable屬性。