如何将DataTable转换为CustomDataTable?

时间:2019-04-04 11:29:09

标签: c# inheritance casting

我写了一个类CustomDataTable,该类继承了DataTable但添加了函数ToHtml()

CustomDataTable

public static CustomDataTable : DataTable {
   public Table ToHtml() {
       Table tbl;
       /*
            logic for converting each row in the DataTable to HTML TableRow
       */
       return tbl;
   }
}

用法:

public static CustomDataTable getTable(String sql) {
    SqlConnection con = new SqlConnection(connection_string);
    SqlCommand cmd = new SqlCommand(sql,con);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds);
    return (CustomDataTable)ds.Tables[0];   // this line triggers the exception
        // Unable to cast object of type 'System.Data.DataTable' to type 'MyProject.CustomDataTable'

}

为什么强制转换失败?

1 个答案:

答案 0 :(得分:2)

  

为什么强制转换失败?

因为它无效。 ds.Tables[0]返回一个DataTable,并且没有其他任何内容,并且您无法将DataTable转换为更派生的类型,例如CustomDataTable

您可以考虑创建一个extension method来扩展DataTable并使用ToHtml()方法:

public static class MyExtensions
{
    public Table ToHtml(this DataTable dt)
    {
        /*
             logic for converting each row in the DataTable to HTML TableRow
        */
    }
}

然后,您可以在任何DataTable上调用它而无需强制转换,例如:

var htmlTable = ds.Tables[0].ToHtml();