c# - Gridview 绑定(bind)不起作用

标签 c# asp.net .net

我正在尝试使用以下代码绑定(bind) GridView 控件。但我收到错误消息“数据为空。无法对空值调用此方法或属性。”错误行是“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;
}

最佳答案

我知道您说过应该有数据,但这通常是在数据丢失时抛出。

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

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

如果这行得通,但随后您在另一行收到错误,您可能还必须检查这些行上的空值。


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

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

关于c# - Gridview 绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18160971/

相关文章:

c# - 从 Application_Error 抛出 http 异常(未经授权)

.net - 跨 DMZ 的代理调用

c# - 是否可以将额外的自定义用户数据传递给自定义 ASP.NET 成员资格提供程序?

c# - 为谷歌浏览器设置默认搜索引擎

c# - 如何编写一种方法,根据用户输入打印出主菜供应天数列表?

c# - 从 DotNet 执行存储过程需要很长时间,但在 SSMS 中它是立即的

c# - 在 MVC 中使用 HTML 按钮

c# - 当值不为空时无法将 NULL 插入列中

c# - 在 Entity Framework 中按名称获取字段

c# - 在 ASP.NET MVC 中处理发布请求