2012-02-16 29 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"])); 
}