2013-08-30 87 views
0

我想做一個列表,用於存儲數據網格視圖的數據源 但數據網格視圖的數據源的類型是「字符串」或「十進制」有沒有辦法做出兩種不同類型的列表

我做了這個代碼

List<string> list1 = (List<string>)DataGridView.Datasource; 
List<decimal> list2 = (List<decimal>)DataGridView.Datasource; 

兩種不同類型的列表,但我想通過聲明只有一個列表 請幫我做這個..

+3

如果以列表形式輸入 ??? –

+5

爲什麼不製作一個代表您的模型的對象而不是將異構數據存儲在列表中? –

+0

你能告訴我你的DataGridView.datasource類型嗎?意味着你已經分配了哪種類型的對象? –

回答

2

如果您需要,您可以將數據源強制轉換爲IList(非通用版本)。

IList data = (IList)DataGridView.Datasource; 

這將允許您訪問列表中的項目爲object類型。

另一種選擇是簡單地檢查名單的種類和採取相應的行動:

if(DataGridView.Datasource is List<string>) 
{ 
    List<string> list = (List<string>)DataGridView.Datasource; 
} 
else 
{ 
    List<decimal> list = (List<decimal>)DataGridView.Datasource; 
} 

這將是你會怎麼做,如果你需要有類型爲字符串或小數的對象,不能像對象那樣與他們一起工作。

+0

很好的解釋,爲什麼列表不起作用。第二種選擇要簡單得多。喜歡它。 – Kaf

4

使用List<object>或者更糟ArrayList(請勿使用ArrayList)。

List<object> list = (List<object>)DataGridView.datasource; 

您也可以看看List<dynamic>

List<dynamic> list = new List<dynamic>(); 
list.Add(1); 
list.Add("ABCD"); 
list.Add(1f); 

foreach (var item in list) 
{ 
    Console.WriteLine(item.GetType()); 
} 

,輸出將是:

System.Int32 
System.String 
System.Single 

(不是真的知道,如果鑄造在GridView的數據源是可能的List<dynamic>

+0

我做了這段代碼,它給了我錯誤:List li = new List (); li.Add(10); li.Add(10); dataGridView1.DataSource = li; 列表 ss =(列表)dataGridView1.DataSource; –

+0

使用動態是不是工作壓力太大同樣的錯誤來了 –

+0

'List'不協變,這就是爲什麼這是不行的。您需要將這兩個列表創建爲'List ',因此這是一個選項。 – Servy

-1
List<object> genericList = (List<object>)DataGridView.datasource; 

它會解決這個問題嗎?

這裏是使用LINQ的示例轉換。

List<decimal> dList = new List<decimal>(); 
List<object> oList = new List<object>(); 
oList = dList.Select(x => (object)x).ToList<object>(); 
+0

沒有它給我的錯誤 –

+0

無法投類型的對象System.Collections.Generic.List'1 [System.Decimal]爲鍵入「System.Collections.Generic.List'1 [System.Object的]」。 –

+0

請幫助我,我真的卡在這個 –

0

如果DataGridView.datasourceList<decimal>,那麼你將需要實例化一個新的列表,並手動添加的每個對象:

List<object> myList = new List<object>(); 
foreach(var item in DataGridView.datasource) 
{ 
    myList.Add(item); 
} 

但作爲DanielMann說,你真的應該定義一個適當的類來處理你的兩個對象的類型,而不僅僅是將它們鎖到一個List<object> ...

0

由於沒有人提到這個尚未...

還有,你可以用它來存儲不同類型的對象在一個IList的兼容集合CompositeCollection。

public class MyObject() 
{ 
    public string SomeData { get; set; } 
    public int SomeOtherData { get; set; } 
} 

public class MyOtherObject() 
{ 
    public Guid ID { get; set; } 
    public object Foo { get; set; } 
} 

public class Main() 
{ 
    private List<MyObject> objects = new List<MyObject>(); 
    private List<MyOtherObject> moreObjects = new List<MyOtherObject>(); 

    public CompositeCollection TheCollection { get; private set; } 

    public Main() 
    { 
     //mock adding data to the list 
     objects.Add(...); 
     moreObjects.Add (...); 

     //Build the composite collection 
     TheCollection = new CompositeCollection 
     { 
      new CollectionContainer {Collection = objects}, 
      new CollectionContainer {Collection = moreObjects}     
     }; 
    } 
} 
相關問題