Gridview绑定无法正常工作

时间:2013-08-10 10:23:13

标签: c# asp.net .net

我正在尝试使用以下代码绑定GridView控件。但是我收到错误“Data is Null。无法在Null值上调用此方法或属性。”错误行是“p.MaterialName = reader.GetString(reader.GetOrdinal(”MaterialName“));”我在Materials表的所有字段中都有数据。代码有什么问题?请帮我解决。

public static List<Product> GetMaterials()
{
    SqlHelper objSqlHelper = new SqlHelper();
    SqlDataReader reader = objSqlHelper.ExecuteReader("GetMaterials");
    List<Product> objMaterials = new List<Product>();
    Product p = new Product();
    while (reader.Read())
    {
        p.MaterialId = reader.GetInt32(reader.GetOrdinal("MaterialId"));
        p.MaterialName = reader.GetString(reader.GetOrdinal("MaterialName"));
        p.desc = reader.GetString(reader.GetOrdinal("desc"));
        p.MaterialPrice = reader.GetDecimal(reader.GetOrdinal("MaterialPrice"));
        p.Datasheet = reader.GetString(reader.GetOrdinal("Datasheet"));
        objMaterials.Add(p);
    }
    reader.Close();
    return objMaterials;
}

1 个答案:

答案 0 :(得分:0)

我知道你说应该有数据,但这通常是在缺少数据时抛出。

尝试检查数据库中“MaterialName”是否为空:

p.MaterialName = reader.IsDBNull("MaterialName")
                   ? null : reader.GetString(reader.GetOrdinal("MaterialName"))

如果这样可行,但是你在另一行上得到了错误,你可能还要检查这些行上的空值。


对于“MaterialPrice”字段,请使用以下内容:(如果p.MaterialPrice不可为空,请将(decimal)null替换为某些默认值,例如0

p.MaterialPrice
    = reader.IsDBNull("MaterialPrice")
        ? (decimal)null : reader.GetDecimal(reader.GetOrdinal("MaterialPrice"))