2012-02-16 37 views
0

讀我有一個返回DataTable如何與DataReader的從數據表

DataTable dt = GetAllObject(ogj_id); 

現在我要填寫一個MultiCheckCombo的功能,下面是我得到這個MultiCheckCombo

MultiCheckCombo Reference

鏈接如何從上面的鏈接填寫MultiCheckCombo的示例僅適用於數據讀取器

OdbcConnection con = "get YOUR connection string"; 
con.Open(); 
OdbcCommand cmd = new OdbcCommand(); 
cmd.Connection = con; 
cmd.CommandText = "select text,id from ..........."; 
OdbcDataReader dr = cmd.ExecuteReader(); 
MultiCheckCombo1.ClearAll(); 
dr.Read(); 
MultiCheckCombo1.AddItems(dr, "text", "id"); 

查詢 - 現在我的問題聽起來像這樣:如何轉換DataTabledataReader填充這個MultiCheckCombo

+0

的問題是,它不具有出色的界面。使用arraylist方法可能會更好,但似乎並不允許您分別指定文本和ID。我建議修改他們的代碼以允許某種枚舉被傳入,然後將其用作數據源......但這並不真正回答你的問題。 :) – Chris 2012-02-16 14:48:07

+0

沒有把'DataTable'轉換成'DataReader'的東西。他們是不同的東西,用於不同的情況。 看看這裏:http://msdn.microsoft.com/en-us/library/haa3afyz%28v=vs.90%29.aspx – 2012-02-16 14:50:35

+0

在幕後我認爲.NET使用'DataReader'來填充'DataTable'。你將基本上是從一個轉換到另一個,然後再回來:) – dana 2012-02-16 15:02:32

回答

2

找到一個不同的控制。這是一個硬編碼使用OdbcDataReader。您不使用DataReader來讀取DataTable中的數據 - 您可以遍歷DataRows

作爲一種變通方法,您可以重載爲addItems接受一個DataTable:

public void AddItems(DataTable dt, string textField, string valueField) 
{ 
    ClearAll(); 
    int i = 0; 
    foreach (DataRow dr in dt.Rows) 
    { 
     chkList.Items.Add(dr[textField].ToString()); 
     chkList.Items[i].Value = dr[valueField].ToString(); 
     i++;    
    } 
} 
1

您無法將數據讀取器轉換爲數據表。您必須遍歷表格的內容並手動構建每個項目。我不熟悉這個特別的控制,但如果按照通常慣例,應該大概是這個樣子:

foreach(DataRow row in dt.Rows) 
{ 
    MultiCheckCombo1.Items.Add(new ListItem(dt["text"], dt["id"])); 
}