如何将对象映射到数据表行以在datagrid中显示?

时间:2017-03-16 07:51:33

标签: c# datagridview datatable

这是一个将值设置为DB resultset的自定义对象的函数,然后我想再次返回datatable

public DataTable getProductsTable(DataSet productData)
{
    DataTable dt = new DataTable();
    try
    {
        int i = 0;
        dt.Columns.Add("catid", typeof(string));

        for (i = 0; i <= productData.Tables[0].Rows.Count - 1; i++)
        {

            productData dataObj = new productData();
            dataObj.id = (string)productData.Tables[0].Rows[i]["id"].ToString();
            dataObj.barcode = (string)productData.Tables[0].Rows[i]["barcode"].ToString();
            dataObj.catid = (string)productData.Tables[0].Rows[i]["catid"].ToString();
            dataObj.entity_id = (string)productData.Tables[0].Rows[i]["entity_id"].ToString();
            dataObj.sku = (string)productData.Tables[0].Rows[i]["sku"].ToString();
            dataObj.name = (string)productData.Tables[0].Rows[i]["name"].ToString();
            dataObj.price = (string)productData.Tables[0].Rows[i]["price"].ToString();
            dataObj.final_price = (string)productData.Tables[0].Rows[i]["final_price"].ToString();
            dataObj.qty = (string)productData.Tables[0].Rows[i]["qty"].ToString();
            dataObj.is_in_stock = (string)productData.Tables[0].Rows[i]["is_in_stock"].ToString();
            dataObj.special_from_date = (string)productData.Tables[0].Rows[i]["special_from_date"].ToString();
            dataObj.special_to_date = (string)productData.Tables[0].Rows[i]["special_to_date"].ToString();
            dataObj.status = (string)productData.Tables[0].Rows[i]["status"].ToString();
            dataObj.parent_id = (string)productData.Tables[0].Rows[i]["parent_id"].ToString();
            dataObj.type_id = (string)productData.Tables[0].Rows[i]["type_id"].ToString();
            //data.Add(dataObj);
            dt.Rows.Add(dataObj);
        }

    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    return dt;
}

但它不起作用,在我运行上面的函数后,显示所有columns但所有rows都没有显示没有值,第一列只显示namespace.productData。有人如何解决这个问题?

https://s27.postimg.org/li3lmr99f/test.png

1 个答案:

答案 0 :(得分:1)

dt只有一列("catid")。为每个属性添加更多列,如下所示:

DataTable dt = new DataTable()
{
   Columns = { "id", "barcode", "catid", etc...}
};

DataTable.Rows属于DataRowCollection类型,其中包含Add方法的2次重载:

1. public void Add(DataRow row)
2. public DataRow Add(params object[] values)

dt.Rows.Add(dataObj);使用第二个重载并在第一列中添加单个值。要正确添加值,请使用

dt.Rows.Add(dataObj.id, dataObj.barcode, etc... );