You are overwriting your DataRow r which follows the schema of bucketdt with a DataRow folowing another schema.
DataRow r = bucketdt.NewRow();
r = dosObject.SubCategoryDetails2(Convert.ToInt16(val)).Rows[0]; // overwrites r with a DataRow following another schema