2013-11-24 3 views
-1

Мой Datagrid заполнен нужным количеством строк, но нет данных. Все строки отображают пустые столбцы.hashtable datagridview показать пустые строки

Что может быть причиной этого?

basedon

Это первый раз я использую DataGridView.

public void BindDataGridView(DataGridView dgv, Hashtable ht) { 

     DataSet ds = new DataSet(); 
     DataTable dt = ds.Tables.Add("test"); 

     //now build our table 
     dt.Columns.Add("col1", typeof(string)); 
     dt.Columns.Add("col2", typeof(Int32)); 

     IDictionaryEnumerator enumerator = ht.GetEnumerator(); 

     DataRow row = null; 

     while (enumerator.MoveNext()) { 
      string index = (string)enumerator.Key; // boekingsREf 
      MyClass a = (MyClass)enumerator.Value; 

      row = dt.NewRow(); 
      row["col1"] = index; 
      row["col2"] = a.number; 
      dt.Rows.Add(row); 
     } 

     //dgv.DataSource = ds.Tables[0]; 
     dgv.DataSource = ds.Tables[0]; 

    } 

ответ

0

Первый пример:

public Form1() 
{ 
    InitializeComponent(); 

    Hashtable ht = new Hashtable(); 
    ht[1] = "One"; 
    ht[2] = "Two"; 
    ht[3] = "Three"; 

    BindDataGridView(dataGridView1, ht); 
} 

public void BindDataGridView(DataGridView dgv, Hashtable ht) 
{ 
    DataSet ds = new DataSet(); 
    DataTable dt = ds.Tables.Add("test"); 

    //now build our table 
    dt.Columns.Add("col1", typeof(int)); 
    dt.Columns.Add("col2", typeof(string)); 

    foreach (DictionaryEntry dictionaryEntry in ht) 
    { 
     int index = (int)dictionaryEntry.Key; 
     string value = (string)dictionaryEntry.Value; 

     DataRow row = dt.NewRow(); 
     row["col1"] = index; 
     row["col2"] = value; 
     dt.Rows.Add(row); 
    } 

    dgv.DataSource = ds.Tables[0]; 
} 

enter image description here

Второй пример:

Предполагая, что ваш MyClass является

public class MyClass 
{ 
    public int number { get; set; } 

    static public implicit operator MyClass(int value) 
    { 
     return new MyClass() { number = value }; 
    } 
} 

и Хеш является (реверс ключи/значения)

Hashtable ht = new Hashtable(); 
ht["One"] = 1; 
ht["Two"] = 2; 
ht["Three"] = 3; 

и вы измените эту строку из вашего почтового кода

MyClass a = (int)enumerator.Value; 

enter image description here

+0

Ваш пример, конечно, работает, однако я не мог» t найти что-то не так в OP-коде. Он должен работать, и на самом деле я пробовал аналогичный код и работает как шарм. У ОП может быть что-то странное прямо в его тестировании, многие виды такого вопроса были опубликованы в SO. –

+0

Спасибо за вашу помощь и время Томек, я сделал это с нуля, теперь он отлично работает. – herman

Смежные вопросы