如何从datatable中读取datareader

时间:2012-02-16 14:43:33

标签: c# asp.net datatable datareader

我有一个返回DataTable的函数

DataTable dt = GetAllObject(ogj_id);

现在我想填一个MultiCheckCombo,下面是我得到这个MultiCheckCombo的链接

MultiCheckCombo Reference

如何从上面的链接填充此MultiCheckCombo的示例仅适用于dataReader

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

查询 - 现在我的问题听起来像这样:如何在DataTable中转换dataReader来填充此MultiCheckCombo

2 个答案:

答案 0 :(得分: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 :(得分:1)

您无法将数据读取器转换为数据表。您必须循环遍历表的内容并手动构建每个项目。我不熟悉这个特定的控件,但如果它遵循常规约定,它应该看起来像这样:

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